28Eki/101
TC Kimlik No Algoritması ve JavaScript Doğrulama Fonksiyonu
Her ne kadar rastgele gibi görünse de TC Kimlik Numarası belirli bir algoritma kullanılarak üretilmektedir. İlk 9 hanesi gerçek numara, son 2 karakteri ise kontrol amaçlı olarak kullanılan parite anahtarlarıdır.
WikiPedi'de belirtilen doğrulama algoritması;
ilk 10 rakamın toplamının birler basamağı, 11. rakamı vermekte.
Ayrıca; 1, 3, 5, 7 ve 9. rakamın toplamının 7 katı ile 2, 4, 6 ve 8. rakamın toplamının 9 katının toplamının birler basamağı 10. rakamı; 1, 3, 5, 7 ve 9. rakamın toplamının 8 katının birler basamağı 11. rakamı vermektedir.
Yukarıdaki algoritmayı kullanarak ihtiyaç duyduğumda kullanılabileceğim basit bir T.C. Kimlik No Doğrulama fonksiyonu hazırladım.
function validateKimlikNo( KimlikNo ){
KimlikNo = String(KimlikNo);
if( ! KimlikNo.match(/^[0-9]{11}$/) )
return false;
pr1 = parseInt(KimlikNo.substr(0,1));
pr2 = parseInt(KimlikNo.substr(1,1));
pr3 = parseInt(KimlikNo.substr(2,1));
pr4 = parseInt(KimlikNo.substr(3,1));
pr5 = parseInt(KimlikNo.substr(4,1));
pr6 = parseInt(KimlikNo.substr(5,1));
pr7 = parseInt(KimlikNo.substr(6,1));
pr8 = parseInt(KimlikNo.substr(7,1));
pr9 = parseInt(KimlikNo.substr(8,1));
pr10 = parseInt(KimlikNo.substr(9,1));
pr11 = parseInt(KimlikNo.substr(10,1));
if( (pr1+pr3+pr5+pr7+pr9+pr2+pr4+pr6+pr8+pr10) % 10 != pr11 )
return false;
if( ( (pr1+pr3+pr5+pr7+pr9)*7 + (pr2+pr4+pr6+pr8)*9 ) % 10 != pr10 )
return false;
if( ( (pr1+pr3+pr5+pr7+pr9)*8) % 10 != pr11 )
return false;
return true;
}
21 Nisan 2011, 03:41
Private Sub Command1_Click()
‘ – T.C. Kimlik No. doğrulama algoritması -
‘ Aşağıdaki kontrolleri yapar, girilen kimlik numarası doğruysa ekrana ‘doğru’ mesajı çıkartır.
‘ 1. basamak 0 olmamalı.
‘ Toplam 11 basamaklı olmalı.
‘ 1. 3. 5. 7. ve 9. basamakların toplamının 7 katından; 2. 4. 6. ve 8. basamakların toplamı çıkarıldığında elde edilen sayının birler basamağı, kimlik numarasının 10. basamağına eşit olmalı.
‘ İlk 10 basamağın toplamından elde edilen sayının birler basamağı, kimlik numarasının 11. yani son basamağına eşit olmalı.
‘ Erhan Yazıcı / Mimax / 2008
Dim sira(10) As Byte
For i = 1 To 10
sira(i) = Mid(Text1, i, 1)
toplam = toplam + sira(i)
Next
If Left(Text1, 1) > 0 And Len(Text1) = 11 And Right(Text1, 2) = Right(7 * (sira(1) + sira(3) + sira(5) + sira(7) + sira(9)) – (sira(2) + sira(4) + sira(6) + sira(8)), 1) & Right(toplam, 1) Then
MsgBox “doğru”
End If
End Sub