RSS

TC Kimlik No Algoritması ve JavaScript Doğrulama Fonksiyonu

Ekim 28

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;
}
 

Posted by on 28 Ekim 2010 in Javascript, Programlama

7 Comments

7 responses to “TC Kimlik No Algoritması ve JavaScript Doğrulama Fonksiyonu

  1. ekrem

    21 Nisan 2011 at 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

     
  2. mehemt ali

    20 Mart 2013 at 15:48

    11111111110
    22222222220
    .
    .
    .
    99999999990

    Bu rakamlar TC kimlik no olmamasına rağmen geçiyor _?

     
    • Göktuğ ÖZTÜRK

      27 Mart 2013 at 15:10

      Maalesef sadece javascript ile girilen rakamlar için hash kontrolü yapılıyor. Bu nedenle belirttiğiniz rakamların kontrolden geçmeleri gayet normal. Bu gibi sıralı numaraları bir dizide tutarak, bunlardan biri girildiğinde negatif cevap vermesini sağlayabilirsiniz.
      Kontrolü js ile yaptığınız sürece 10 rasgele numaranın sonuna 11. karakter olarak 0-9 rakamlarını deneyerek geçerli bir T.C. numarası üretebilirsiniz.

      Bu fonksiyonun kullanım amacı insanların kendi T.C. numaralarını doğru vermelerini sağlamak değil, girdikleri T.C. No’da hata varsa, o hatayı farketmelerini sağlamak olmalı.

      Eğer kişilerin kendi T.C. numaraları doğru girmelerini gerektiren bir sisteminiz varsa, http://www.goktugozturk.com.tr/programlama/php-ve-soap-ile-tc-kimlik-numarasi-dogrulama/ yazısındaki webservisi kullanarak kişinin bilgilerini doğrulayabilirsiniz.

       
Add Comment Register



Bir Cevap Yazın

E-posta hesabınız yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>