Formül hesabı

Katılım
23 Kasım 2007
Mesajlar
245
Excel Vers. ve Dili
2003
Bir sitede kullanılan birsistemi projemde kullanmam gerikiyor

sitenin linki
http://www.meeberg.com/checkdigit.htm

Burda Yazılan Tank numarası doğrulanıyor ve son karekter veriliyor

Örneğin bu bir tank numarası burda tireden sonraki rakam verdiğim likte oluşuyor
ALTU 123 056-0
GESU 801 863-3
PCVU 125 684-0

verdiğim linkkin kaynak kodlarını bir yerekarar çözdüğümüzannediyorum :)

Harfler sayılara tanımlanıyor

Array("a",10,"b",12,"c",13,"d",14,"e",15,"f",16,"g",17,"h",18,"i",19,"j",20,"k",21,"l",23,"m",24,"n",25,"o",26,"p",27,"q",28,"r",29,"s",30,"t",31,"u",32,"v",34,"w",35,"x",36,"y",37,"z",38);


script bilmediğim için function çezemedim

Yardımcı olanan arkadaşlara şimdiden teşekkürler
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın pcman,

Tam olarak ne istediğinizi anlayamadım. Ancak ilgili uygulamayı Access e uyguladım. VBA kodlarından takip edebilirsiniz sanırım.

İyi çalışmalar
 
Katılım
6 Şubat 2005
Mesajlar
1,467
Projeniz Excel'de ise aşağıdaki fonksiyonu kullanabilirsiniz
Kontenyer Numarasını tek hücreye boşluk vermeden giriniz.
Function deger(harf)
If Asc(harf) = 65 Then
deger = 10
ElseIf Asc(harf) > 65 And Asc(harf) < 76 Then
deger = Asc(harf) - 54
ElseIf Asc(harf) > 75 And Asc(harf) < 86 Then
deger = Asc(harf) - 53
ElseIf Asc(harf) > 85 And Asc(harf) <= 90 Then
deger = Asc(harf) - 52
End If
End Function
Function KonteynerKontNo(KonteynerNo)
For i = 1 To 10
If Not IsNumeric(Mid(KonteynerNo, i, 1)) Then
a = Application.Power(2, i - 1) * deger(Mid(KonteynerNo, i, 1))
Else
a = Application.Power(2, i - 1) * Mid(KonteynerNo, i, 1)
End If
b = b + a
Next
c = b Mod 11
If c = 10 Then
KonteynerKontNo = 0
Else
KonteynerKontNo = c
End If
End Function
 
Katılım
23 Kasım 2007
Mesajlar
245
Excel Vers. ve Dili
2003
Sn Modal&#305; ve omerceri &#199;ok te&#351;ekk&#252;r ederim

Sizin gibi Payla&#351;&#305;mc&#305;larla excel.web.tr dahada keyifli bir ortam haline geliyor.
 
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Benim eklediğim uygulamada ufak bir hata var. hesaplanan sayı 10 ise 0 olma ihtimalini eklememiştim.
calc fonksiyonunu şöyle değiştitin:

Kod:
Public Function calc(testTal1 As Variant, testTal2 As Variant)
Dim inputStr
Dim sum, currentLetter, delsum, multiplier
inputStr = testTal1 & testTal2
sum = 0
multiplier = 1
For i = 1 To 10
    currentLetter = Mid(inputStr, i, 1)
    
        If Not IsNumeric(currentLetter) Then
            delsum = getLetterValue(currentLetter)
        Else
            delsum = Val(currentLetter)
        End If
        
            sum = sum + (delsum * multiplier)
            multiplier = multiplier * 2
Next i
    calc = sum Mod 11
    [B][COLOR=red]If sum Mod 11 = 10 Then
        calc = 0
    End If
[/COLOR][/B]End Function
Kırmızı olan kısım eklenecek.

İyi çalışmalar:)
 
Katılım
23 Kasım 2007
Mesajlar
245
Excel Vers. ve Dili
2003
Sn Modal&#305; zaman&#305;n&#305;z olunca Kobaca Bu kodlar&#305;n a&#231;&#305;klamas&#305;n&#305; yaparm&#305;s&#305;n&#305;z

&#246;r.. Tankno ilk 4 karekter harftir ve say&#305;ya &#231;evrilir a=10 ba&#351;lar 4i&#351;lemler falan

&#304;yi &#231;al&#305;&#351;malar :)
 
Katılım
6 Şubat 2005
Mesajlar
1,467
Sn pcman
İlk dört hanesi Konteyner Sahibinin kodları olup harflerle gösterilir ve son harfi U dur.
Sonraki 6 rakkam seri numarasıdır. 6 haneden küçük gösterilmişse başına 0 eklenerek 6'ya tamamlanır.
Harfler bir sabit sayıya denk gelir.
A 10
B 12
C 13
D 14
E 15
F 16
G 17
H 18
I 19
J 20
K 21
L 23
M 24
N 25
O 26
P 27
Q 28
R 29
S 30
T 31
U 32
V 34
W 35
X 36
Y 37
Z 38
Harflerin karşılığı bu sayılar ile seri numarasının rakamları,
sırası ile 2 üst 0'dan başlanarak, 2 üstü 9 kadar çarpılır.
örneğin

ALTU123056 numaralı konteyner

(A = 10) (2 Üst 0 = 1) 10 x 1= 10
(L = 23) (2 üst 1 = 2) 23 x 2 = 46
(T = 31) (2 üst 2 = 4) 31 x 4 = 124
(U = 32) (2 üst 3 = 8) 32 x 8 = 256
(1 = 1) (2 üst 4 = 16) 1 x 16 = 16
(2 = 2) (2 üst 5 = 32) 2 x 32 = 64
(3 = 3) (2 üst 6 = 64) 6 x 64 = 192
(0 = 0) (2 üst 7 = 128) 0 x 128 = 0
(5 = 5) (2 üst 8 = 256) 5 x 256 = 1280
(6 = 6) (2 üst 8 = 512) 6 x 512= 3072
__________
5060
sonra bu çıkan çarpım sonuçları toplanır.
bulunan sayı 11'e tam sayı kalana kadar bölünür. KALAN kontrol rakamıdir.
örnekte tam bölündüğü için kontrol rakkamı 0
Not
kalan 10 olduğu taktirde 0 kabul edilecek.

bu heplama için çok değişik biçimlerde kod yazılabilinir
 
Son düzenleme:
Katılım
25 Aralık 2005
Mesajlar
4,160
Excel Vers. ve Dili
MS Office 2010 Pro Türkçe
Sayın pcman,

Bu işin algoritması çok basit:

1.Harf alanı ile sayı alanını birleştiriyoruz.
2. Yeni elde ettiğimiz metinin harflerini teker teker alıyoruz ve soruda verdiğiniz Array a göre numaralandırıyoruz. a=10, m=24 vs. Aynı zamanda da topluyoruz.
3.Sayısal alanlar direkt olarak toplama giriyor.
4. En sonunda genel toplamı 11 bölüp kalanı alıyoruz.
5. Bu kalan 0-9 arası ise hesaplanan kalan, yok 10 ise bu kez 0 olarak son digiti hesaplamış oluyoruz.

Başka soracağınız var ise memnuniyetle cevaplandırabilirim.

İyi çalışmalar
 
Katılım
6 Şubat 2005
Mesajlar
1,467
Sn Modal&#305;
Say&#305;lar&#305;n kendi de&#287;erlerinin toplam&#305; de&#287;il, say&#305;lar&#305;n s&#305;ras&#305; ile 2 &#252;st 0 den 2 &#252;st 9'a kadar &#231;arp&#305;m&#305;n&#305;n toplam&#305;
 
Üst