PHP ile TC Kimlik No Doğrulama Nasıl Yapılır? (NVI API Rehberi)

PHP ile TC Kimlik No Doğrulama Nasıl Yapılır? (NVI API Rehberi)

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

  1. SOAP Eklentisi: PHP sunucunuzda php_soap eklentisinin aktif olması gerekir. php.ini dosyasından kontrol edebilirsiniz.

  2. Büyük Harf Uyumu: NVI servisi verileri büyük harfle bekler. Yukarıdaki tr_strtoupper fonksiyonu strtoupper fonksiyonunun Türkçe karakterlerde hata yapmasını engeller.

  3. Doğum Yılı: Servis, doğum tarihini gün/ay olarak değil, sadece 4 haneli Yıl olarak talep eder.

  4. Güvenlik: SOAP isteklerini try-catch blokları 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)
Tarih: