php ile tc kimlik numarası kontrolü..

2000 yılından itibaren kullanmaya başladığımız tc kimlik numaraları, 2008 yılının mayıs ayından beridir, yapacağımız her resmi işlemde tc kimlik numarasının kullanılması zorunlu hale getirildi.. bununla birlikte bazı internet siteleri de (özellikle alışveriş siteleri) üye kayıtlarında tc kimlik numarası istiyor.. üye olduğumuz sitelerde, kimlik numaralarını doğrulayabilmek için çeşitli yöntemler kullanırlar.. büyük şirketler bu işlemi nüfus ve vatandaşlık işleri‘nin kimlik paylaşım sistemi ile otomatik yapıyorlar.. tabii her bir sorgu için belirli bir ücret ödüyorlar..

kimlik numarası doğrulama işlemini mantık olarak php ile nasıl yaparız, onu göreceğiz..

öncelikle, kimlik numaralarının algoritmasını belirtelim..

  • kimlik numaraları 11 haneden oluşur..
  • her bir hane rakamsal değer içerir.. kesinlikle harf barındırmazlar..
  • 0 (sıfır) ile başlamazlar..
  • 1, 3, 5, 7 ve 9. basamakların toplamının 7 katından, 2, 4, 6 ve 8. basamakların toplamı çıkartıldığında, çıkan sonucun 10′a bölümünden kalan sayı (mod10), kimlik numaramızın 10. hanesine eşittir..
  • ilk 10 basamağın toplamından çıkan sonucun 10′a bölünmesinden kalan sayı da, 11. haneye eşittir..

biraz karışık göründüğünün farkındayım ama aslında hiç de öyle değil :) kodumuz ile birlikte açıklayalım..

<?php

// kimlik numaramız..
$kno = 24598732561;
// kimlik numaramızın 11 haneli ve tamamen rakamlardan oluşup oluşmadığını
// kontrol ediyoruz..
if (eregi("^[0-9]{11,11}", $kno))
{
   // kimlik numaramız 0 (sıfır) ile başlıyorsa uyarı verip
   // işlemi durduruyoruz..
   if($kno[0] == 0)
   {
   	echo '<strong>'.$kno .': <font color="red">yanlış..</font></strong>';
   	exit();
   }
   // tek haneleri (1, 3, 5, 7 ve 9. basamaklar) topluyoruz..
   $tekler = $kno[0] + $kno[2] + $kno[4] + $kno[6] + $kno[8];
   // çift haneleri (2, 4, 6 ve 8. basamaklar) topluyoruz..
   $ciftler = $kno[1] + $kno[3] + $kno[5] + $kno[7];
   // 10. basamağı kontrol etmek için; tekler toplamını 7 ile çarpıp,
   // çiftler toplamından çıkarıyoruz ve çıkan sonucun 10'a bölümünden
   // kalanı alıyoruz (mod10)
   $basamak10 = ($tekler * 7 - $ciftler) % 10;
   // ilk 10 haneyi toplayıp, 10'a bölümünden kalanı alıyoruz (mod10)
   $toplam = ($tekler + $ciftler + $kno[9]) % 10;
   // çıkan basamak10 değeri, kimlik numaramızın 10. basamağı ile eşleşiyor mu
   // kontrol ediyoruz..
   if($basamak10 != $kno[9])
   {
      echo '<strong>'.$kno .': <font color="red">yanlış..</font></strong>';
   }
   // ilk 10 basamağın toplamının mod10 değeri, 11. basamak ile eşleşiyor mu
   // kontrol ediyoruz..
   if($toplam != $kno[10])
   {
      echo '<strong>'.$kno .': <font color="red">yanlış..</font></strong>';
   }
   // yukarıdaki her iki eşleşmede de eşitsizliğe baktık.. eğer eşitlik varsa
   // aşağıdaki sonuç ekrana yansıyacaktır..
   else
   {
      echo '<strong>'.$kno .': doğru..</strong>';
   }
}
// eğer kimlik numarası 11 haneden az veya çok ya da rakam harici karakterler
// içeriyorsa, kod hata verecek ve işlemi durduracak..
else
{
   echo '<strong>'.$kno .': <font color="red">yanlış..</font></strong>';
   exit();
}

?>

kodların içinde ne yaptığımızı gayet açık şekilde anlattığımı düşünüyorum.. kodun çalışan halini (bir küçük form eki ile birlikte) buraya tıklayarak deneyebilirsiniz.. kullanım kolaylığı açısından da bir fonksiyona dönüştürebilirsiniz..

bu kodun gerçek sonuçlar vermeyeceğini, sadece mantıken bir sorgulama yapabileceğinizi unutmayın..

etiketler, , , , , , , , , ,

    3 yorum yapılmış...

  • ali - 11 Ekim 2009 @ 15:13.46

    Güzel formül olmuş.
    Toplu olarak txt belgesinde bulunan numaraları kontrol etme şansımız var mı bu tarz uygulamalarda?

    [cevapla]

    lestioni - 11 Ekim 2009 @ 21:28.44

    bu kodu fonksiyon haline çevirip, daha sonra bir döngü içinde yapılabilir tabii..

    [cevapla]

  • Ali - 11 Ekim 2009 @ 21:54.29

    Php hakkında bilgim yok benim. Önerim kullanım açısından güzel olur kanaatindeyim.

    [cevapla]

Yorum yaz









dipnot: Yorumunuz onaydan geçtikten sonra yayınlanacak. Aynı yorumu tekrar tekrar göndermemeniz rica olunur.