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..
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..
Güzel formül olmuş.
Toplu olarak txt belgesinde bulunan numaraları kontrol etme şansımız var mı bu tarz uygulamalarda?
[Reply]
lestioni Reply:
11 Ekim 2009 at 21:28
bu kodu fonksiyon haline çevirip, daha sonra bir döngü içinde yapılabilir tabii..
[Reply]
Php hakkında bilgim yok benim. Önerim kullanım açısından güzel olur kanaatindeyim.
[Reply]
Kod hatalı tcmı yazıyorum yanlış diyor ne yazsam yanlıs diyor
[Reply]
lestioni Reply:
5 Ağustos 2010 at 14:17
Kontrol ettim az önce tekrar, her hangi bir sorun yok kodlarda.
[Reply]
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]
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:
16 Kasım 2010 at 22:36
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]