PHP ile TC Kimlik No Doğrulama
TC Kimlik numarası artık hayatımızın bir parçası haline geldi. Hemen hemen her yerde bizden kimlik yerine tc kimli nomuz istenir oldu. Hal böyle olunca internet siteleri de ki bunların büyük çoğunluğu e-ticaret siteleri, kullanıcı(müşteri)lerinden tc kimlik no bilgisi istemeye başladı.Tabii bu alınan numaraların bir şekilde doğrulanması gerekir. İlk başlarda nüfus idaresinin web sitesinden bir web servisi aracılığı ile bunu kontrol ettirmek mümkündü. Fakat artık bu hizmet sadece belli kuruluşlara veriliyor.
Bu numaralar ilk bakışta gelişi güzel verilmiş gibi görünsede aslında bu rakamlarında kendi içinde bir düzeni var. İşte bu düzen bizim girilen kimlik numarasının geçerli bir kimlik numarası olup olmadığını kontrol etmemizde kullanacağımız algoritmanın temelini oluşturuyor.
Kimlik numarasına baktığımızda 11 basamaktan oluşan bir sayı gürürüz. Bu sayının son 2 basamağı ilk 9 basamağı kontrol etmek amacıyla eklenmiştir. Bu ilk 9 basamak ve son 2 basamak arasında şöyle bir bağlantı vardır.
Sayımız abcdefghijk olsun.
x = a+c+e+g+i tek basamaktaki rakamların toplamı
y = b+d+f+h çift basamaktaki rakamların toplamı
j = (7*x-y) mod10 olmalıdır. Bu birinci kuraldır.
İkinci kural ise;
k = (a+b+c+d+e+f+g+h+i+j) mod10 olmalıdır.
Yani yukarıdaki şartları sağlayan her 11 basamaklı sayı tc kimlik numarası olabilir ama bu demek değildirki bu gerçek bir tc kimlik numarasıdır. Bu metod sadece kimilik numarasının tc kimlik numarası standartlarında bir numara olduğunu doğrular. Kesin sonuç vermez.
Sonuçta kullanıcılarımızın girdiği tc kimlik numaralarını nüfus idaresinden kontrol etme şansımız yoksa bu yöntemle bir nebze de olsa doğu bir numara girilmesini sağlayabiliriz.
Şimdi gelelim php koduna. Kod içinde gerekli açıklamalar mevcuttur.
-
/**
-
* Verilen rakamin gecerli bir tc kimlik numarasi
-
* olup olmadigini kontrol eder.
-
*
-
* @param int $no
-
* @return boolean
-
*/
-
function checkIdentityNo($no) {
-
// Girilen numara 11 haneli mi?
-
// Değilse devam etmeye gerek yok
-
return FALSE;
-
}
-
$p = 0; // Cift basamaklar toplami
-
$s = 0; // Tek basamaklar toplami
-
$x = 0; // 10. basamaktaki sayi
-
$y = 0; // Ilk 10 basamagin toplami
-
// Çift ve Tek basamaklarin toplamini hesapla
-
for($i = 0; $i < 9; $i++) {
-
if($i % 2 == 0) {
-
$s += $no[$i];
-
} else {
-
$p += $no[$i];
-
}
-
$y += $no[$i];
-
}
-
// 10. bsamaktaki sayiyi hesapla
-
$x = (7*$s – $p) % 10;
-
// Cikan sonuc girilen sayinin 10. basamagina esit mi?
-
if($x != $no[9]) {
-
// Değilse devam etmeye gerek yok
-
return FALSE;
-
}
-
// Ilk 10 basamagin toplami
-
$y += $x;
-
// Son basamaktaki sayi cikan sonuca eşit mi?
-
if($y % 10 != $no[10]) {
-
return FALSE;
-
}
-
return TRUE;
-
}













Son Yorumlar