Javascript ile TC kimlik no doğrulama
Ceviz forumda okudum. “TC kimlik numarasının ilk 10 rakamının toplamının verdiği sonucun 1′ler basamağı 11. sayıya eşitir.” bunun için bir javascript kodu yazdım. Sizlerede lazım olur diye buraya yazıyorum.
javascript kodu:
function tckimlikkontorolu(tcno)
{
var tckontrol,toplam;
tckontrol = tcno;
tcno = tcno.value;
toplam = Number(tcno.substring(0,1)) + Number(tcno.substring(1,2)) + Number(tcno.substring(2,3)) + Number(tcno.substring(3,4)) + Number(tcno.substring(4,5)) + Number(tcno.substring(5,6)) + Number(tcno.substring(6,7)) + Number(tcno.substring(7,8)) + Number(tcno.substring(8,9)) + Number(tcno.substring(9,10));
strtoplam = String(toplam);
onunbirlerbas = strtoplam.substring(strtoplam.length, strtoplam.length-1);
if(onunbirlerbas == tcno.substring(10,11))
{
alert("doğru");
}
else{
alert("yanlış");
}
}
html kodu:
<input name="tckimlikno" type="text" id="tckimlikno" onblur="tckimlikkontorolu(this);" maxlength="11" />
Ben bu kodu blur ile tetikledim siz bunu değiştirebilirsiniz. Çalışan kodu görmek için tıklayınız.
Bu algoritma tek başına doğrulama işlemini yapamaz. 2. bir algoritma daha çalıştırılması gerekir.
2. Algoritma Formülü : 1. 3. 5. 7. ve 9. basamaklarının sayı değerleri toplamının 7 katından, 2. 4. 6. ve 8. basamaklarının sayı değerleri toplamı çıkartılır. Elde edilen sonucun 10′a bölümünden kalan(yani mod10) kimlik numaralarımızın 10. basamağına eşittir. (bu arada çıkarma sonucunda bulunan rakam negatif ise 10 ile toplanır)
son yazdigimi bosverelim, javascript integer'lari 32-bit oldugundan 2.kusur milyardan sonrasini seyetmiyor.
Boyle de olur tabi:
function(value)
{
var sum = 0;
var lastDigit = value % 10;
for (var i=0; i<10; ++i) {
value = (value / 10) | 0; //integer division
sum += value % 10;
}
return (sum % 10 == lastDigit);
}
Substring alarak şu şekilde daha iyi olur:
function(value) {
var lastDigit = value % 10;
var sum = 0;
for (var i=0; i<10; ++i) {
sum += Number(value.substring(i,i+1));
}
var checksumDigit = sum%10;
return (checksumDigit == lastDigit);
}