Tüm Versiyonu Göster : Formül hesabı
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
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
omerceri
07-01-2008, 06:23
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
Sn Modalı ve omerceri Çok teşekkür ederim
Sizin gibi Paylaşımcılarla excel.web.tr dahada keyifli bir ortam haline geliyor.
Benim eklediğim uygulamada ufak bir hata var. hesaplanan sayı 10 ise 0 olma ihtimalini eklememiştim.
calc fonksiyonunu şöyle değiştitin:
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
If sum Mod 11 = 10 Then
calc = 0
End If
End Function
Kırmızı olan kısım eklenecek.
İyi çalışmalar:)
Sn Modalı zamanınız olunca Kobaca Bu kodların açıklamasını yaparmısınız
ör.. Tankno ilk 4 karekter harftir ve sayıya çevrilir a=10 başlar 4işlemler falan
İyi çalışmalar :)
omerceri
07-01-2008, 15:08
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
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
omerceri
07-01-2008, 15:21
Sn Modalı
Sayıların kendi değerlerinin toplamı değil, sayıların sırası ile 2 üst 0 den 2 üst 9'a kadar çarpımının toplamı
vBulletin v3.7.2, Copyright ©2000-2012, Jelsoft Enterprises Ltd.