Web projelerinde kullanıcı güvenliğini artırmak ve hatalı veri girişini önlemek için TC Kimlik No doğrulaması kritik bir rol oynar. Bu yazıda, Türkiye Cumhuriyeti Nüfus ve Vatandaşlık İşleri (NVI) tarafından sunulan SOAP servisini kullanarak, PHP ile gerçek zamanlı TC Kimlik doğrulamayı nasıl yapacağınızı adım adım inceleyeceğiz.
Neden NVI Servisleri Kullanılmalı?
TC Kimlik numaraları belirli bir matematiksel algoritmaya (11 hane, son rakam çift vb.) sahip olsa da, bu algoritma sadece numaranın "biçimsel" olarak doğru olduğunu gösterir. Numaranın gerçekten o kişiye ait olup olmadığını anlamanın tek yolu NVI KPSPublic servisini kullanmaktır.
PHP TC Kimlik Doğrulama Kod Yapısı
NVI servisleri veriyi büyük harf duyarlı olarak kabul eder. Özellikle Türkçe karakterlerin (ç, i, ı, ğ, ö, ş, ü) doğru bir şekilde büyük harfe çevrilmesi işlemin başarısı için şarttır.
<?php
/**
* Türkçe karakter uyumlu büyük harf dönüştürücü
*/
function tr_strtoupper($text)
{
$search = array("ç", "i", "ı", "ğ", "ö", "ş", "ü");
$replace = array("Ç", "İ", "I", "Ğ", "Ö", "Ş", "Ü");
$text = str_replace($search, $replace, $text);
$text = strtoupper($text);
return $text;
}
/**
* NVI SOAP Servisi ile TC Kimlik Doğrulama
*/
function verify($values)
{
try {
$client = new SoapClient("https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL");
$result = $client->TCKimlikNoDogrula([
'TCKimlikNo' => $values["TCKimlikNo"],
'Ad' => tr_strtoupper($values["Ad"]),
'Soyad' => tr_strtoupper($values["Soyad"]),
'DogumYili' => $values["DogumYili"]
]);
return $result->TCKimlikNoDogrulaResult;
} catch (Exception $e) {
return $e->getMessage();
}
}
// Örnek Kullanım
$data = [
'TCKimlikNo' => '11111111111',
'Ad' => 'Yasin',
'Soyad' => 'ERSOY',
'DogumYili' => '1989'
];
if (verify($data) === true) {
echo "Doğrulama Başarılı!";
} else {
echo "Bilgiler Hatalı veya Geçersiz.";
}
Dikkat Edilmesi Gereken Teknik Detaylar
-
SOAP Eklentisi: PHP sunucunuzda
php_soapeklentisinin aktif olması gerekir.php.inidosyasından kontrol edebilirsiniz. -
Büyük Harf Uyumu: NVI servisi verileri büyük harfle bekler. Yukarıdaki
tr_strtoupperfonksiyonustrtoupperfonksiyonunun Türkçe karakterlerde hata yapmasını engeller. -
Doğum Yılı: Servis, doğum tarihini gün/ay olarak değil, sadece 4 haneli Yıl olarak talep eder.
-
Güvenlik: SOAP isteklerini
try-catchblokları içinde kullanarak olası bağlantı hatalarını yönetmelisiniz.
Parametre Açıklamaları
| Parametre | Tip | Açıklama |
| TCKimlikNo | Long / String | 11 haneli kimlik numarası |
| Ad | String | Kullanıcının tam adı (Büyük harf) |
| Soyad | String | Kullanıcının soyadı (Büyük harf) |
| DogumYili | Integer | 4 haneli doğum yılı (Örn: 1989) |