php ile tc kimlik numarası kontrolü..

29 Eylül 2009 tarihinde, saat 04:32.07 civarında yazılmış.

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..

859 gün önce yazılmıştır.
  1. ali diyor ki:

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

    [Reply]

    lestioni Reply:

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

    [Reply]

  2. Ali diyor ki:

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

    [Reply]

  3. Barbaros diyor ki:

    Kod hatalı tcmı yazıyorum yanlış diyor ne yazsam yanlıs diyor

    [Reply]

    lestioni Reply:

    Kontrol ettim az önce tekrar, her hangi bir sorun yok kodlarda.

    [Reply]

  4. Tugrul Doğan diyor ki:

    http://dotnetgurus.net/post/2008/07/06/TC-Vatandaslik-Numarasi-Dogrulama.aspx
    adresinde c# ile yazılmış bir doğrulama örneği var.
    ayrıca http://www.tcno.org adresine girerseniz ise daha ilginç bir durum var framesiz tc no sorgulaması var

    [Reply]

  5. Kerem diyor ki:

    php 5.3.0 versiyonunda çalışıyorum
    if($kno[0] == 0) ifadesi sadece değişken türü karşılaştırması yapmakta bu nedenle hangi karakter gelirse gelsin şart sağlandığı için yanlış çalışmakta.

    doğru ifade şu şekilde olmalı

    if($kno[0] === 0) 3 adet eşittir kullanılmalı.

    [Reply]

    lestioni Reply:

    Kodu tekrar kontrol ettim. Gerek rakam, gerekse harf girdim ancak hata vermedi. Rastgele 11 basamaklı rakamlar girdiğimde yanlış diyor. Kendimin ve ailemin kimlik numaralarını girdiğimde de doğru sonuç veriyor.

    Sunucudaki PHP sürümü 5.2.12. PHP sürümü ile alakalı olabilir tabii.

    [Reply]

Bu yazı hakkında bir şeyler demek ister misiniz?





Tüm haklarını kedim yedi :)