RSS

PHP ve SOAP ile TC Kimlik Numarası Doğrulama

Kasım 11

Önemli: T.C. Kimlik Numarası doğrulama için, yeni geliştirdiğimiz Açık Kaynak PHP Kütüphanesine buradan ulaşabilirsiniz.

Daha önceden yazmış olduğum TC Kimlik No Algoritması ve JavaScript Doğrulama Fonksiyonu yazısında, T.C. Kimlik Numarası’nın kontrol algoritmasını JS fonksiyonuna dönüştürerek kullanmayı anlatmıştım.

Bu konuda ise kontrol algoritmasını bir adım daha ileri götürecek ve kullanıcıdan aldığımız TC Numarası, Ad, Soyad ve Doğum Yılı bilgilerini kullanarak nvi.gov.tr sunucularından doğruluğunu kontrol edeceğiz.

SOAPClient kullanımı hakkında detaylı bilgiye ulaşmak için Mustafa KIRIMLI’nın yazmış olduğu PHP İle SOAP Server ‘a Bağlanmak konusunu okuyabilirsiniz.

Öncelikle sayfamızda bu bilgileri toplayabileceğimiz bir form olması gerekiyor. En basit haliyle bir form tasarlamak gerekirse kodumuz aşağıdaki gibi olmalıdır.

<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
</head>
<body>
<form id="dogrula" method="post">
<table>
<tbody>
<tr>
<td>T.C. Kimlik Numarası:</td>
<td><input type="text" name="tckimlikno" size="11" maxlength="11" /></td>
</tr>
<tr>
<td>Adı:</td>
<td><input type="text" name="ad" /></td>
</tr>
<tr>
<td>Soyadı:</td>
<td><input type="text" name="soyad" /></td>
</tr>
<tr>
<td>Doğum Yılı:</td>
<td><input type="text" name="dogumyili" size="4" maxlength="4" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Doğrula" /></td>
</tr>
</tbody>
</table>
</form>
</body>
</html>

Aşağıdaki php kodları girilen bilgileri doğrulamak için kullanacağımız dogrula.php dosyasının içeriğidir.

<?
header ('Content-type: text/html; charset=utf-8');
$client = new SoapClient("https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL");
$_POST['tckimlikno'] *= 1; // Gönderilen talepte TC Kimlik Numarası integer olmalı.
try{
  $requestData = array( // Formdan gelen değerler
    "TCKimlikNo" => $_POST['tckimlikno'],
    "Ad" => $_POST['ad'],
    "Soyad" => $_POST['soyad'],
    "DogumYili" => $_POST['dogumyili']
    );
  $result = $client->TCKimlikNoDogrula($requestData);
  if ($result->TCKimlikNoDogrulaResult){
    echo "TC Kimlik Numarası Geçerli";
  }else{
    echo "TC Kimlik Numarası Hatalı";
  }
}
catch (Exception $ex){
  echo $ex->faultstring;
}
?>

Şimdi ise oluşturduğumuz form ile php dosyamızı ilişkilendiren ve AJAX ile sorgulama yaparak sonucunu kullanıcıya gösteren basit bir javascript kodu yazıp formumuzun bulunduğu sayfaya ekliyoruz.

<script type="text/javascript">
 $('#dogrula').submit(function() {
 $.post("dogrula.php", $("#dogrula").serialize(), function(data){
 alert("Doğrulama Sonucu: " + data);
 });
 return false;
 });
</script>

Sadece deneme amaçlı bir çalışma olduğu için doğrulama sonucunu alert fonksiyonu ile kullanıcıya göstermeyi tercih ettim. Siz bu kısmını kendinize göre uyarlayarak daha işlevsel bir yapı oluşturabilirsiniz.

Not: Sorgulanacak bilgilerin hepsi büyük harfle girilmek zorundadır.

Başka bir yazıda görüşmek dileğiyle…

 

Posted by on 11 Kasım 2010 in Javascript, JQuery, PHP, Programlama

24 Comments

Tags: , , , ,

24 responses to “PHP ve SOAP ile TC Kimlik Numarası Doğrulama

  1. ibrahim edib kökdemir

    01 Nisan 2011 at 14:46

    teşekkürler

     
  2. Eren Başaran

    07 Nisan 2011 at 11:05

    Hocam teşekkür ederim, elinize sağlık…

     
    • Göktuğ ÖZTÜRK

      12 Haziran 2011 at 21:31

      Bilgilendirme için teşekkürler. Kodda gerekli güncellemeyi yaptım.

       
  3. Yasin

    17 Ağustos 2011 at 16:21

    Verdiğiniz örnek çok güzel ve kullanışlı bir örnek ancak benim bi sorunum var. Kodları test etmek istedim ve tamamen kendime ait bilgileri yazdım. Sorgu sonucu TC NO hatalıdır olarak dönüyor. Birkaç kez denedim sonuç değişmedi. Sorun ne olabilir ?

     
    • Yasin

      17 Ağustos 2011 at 16:25

      Sorunun sebebi buldum.

      Ekleme yapayım… Sorgulanacak bilgilerin hepsi büyük harfle girilmek zorundadır.

       
      • Göktuğ ÖZTÜRK

        19 Ağustos 2011 at 11:35

        Hatırlatma için teşekkür ederim Yasin. Yazıya not düşüyorum.

         
  4. Murat Şenkal

    22 Ağustos 2011 at 14:00

    Uygulama could not connect to host hatası veriyor. Nasıl çözebilirim.

     
    • Göktuğ ÖZTÜRK

      23 Ağustos 2011 at 09:37

      Çok büyük ihtimalle test ettiğin sunucuda php’nin OpenSSL desteği aktif edilmemiş.
      php.ini dosyasında

      extension=php_soap.dll

      ve

      extension=php_openssl.dll

      satırlarını bulun.
      Bu satırların önlerindeki “;” (noktalı virgül) işaretlerini silin.
      Eğer bu satırlardan herhangi biri yoksa, php.ini dosyasındaki [extensions] bölümünün altına ekleyebilirsiniz.

      Değişiklikleri kaydedip, Apache’yi yeniden başlatın. Bu ayarlardan sonra sorunsuz çalışması gerekiyor.

       
  5. HÜSEYİN

    05 Eylül 2011 at 12:25

    hocam verdiğin bilgiler için teşekkürler. Senin gösterdiğin kodları kullanıyordum bir sıkıntı yoktu fakat 2 eylülden itibaren kodlar fatal error vermeye başladı. sebebini anlamadım. Değiştirilmesi gereken bir yer mi var ?

     
    • Göktuğ ÖZTÜRK

      05 Eylül 2011 at 13:03

      tckimlik.nvi.gov.tr adresinde bir sıkıntı var. Bu sorunu düzelttiklerinde tekrar çalışmaya başlayacaktır.

       
  6. ahmet

    20 Aralık 2013 at 14:36

    yükleniyor gif i koyabilmek için ne yapmalıyız

     
    • Göktuğ Öztürk

      25 Ocak 2014 at 01:48

      Siteye gizli olarak yüklediğiniz resmi Javascript fonksiyonu tetiklendiği anda $.post satırından önce görünür hale getirebilirsiniz.
      Sonrasında ise $.post fonksiyonunun return fonksiyonunda alert fonksiyonundan önce resmi tekrar gizlemeniz gerekiyor.

       
  7. Zeki

    15 Ocak 2014 at 22:39

    Merhaba;
    Söz konusu kodlar tam istediğim şekilde. Fakat şuan sanırım kimlik sorgu sistemi yenilendiğinden dolayı çalışmıyor. Yeni sistem üzerinde çalışmalarınız bulunuyor mu?

    Saygılarımla.

     
  8. naci

    29 Ocak 2014 at 14:15

    SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn’t load from ‘https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL’ : failed to load external entity “https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL” in C:\wamp\www\samet\tc\index.php:10 Stack trace: #0 C:\wamp\www\samet\tc\index.php(10): SoapClient->SoapClient(‘https://tckimli…’) #1 {main} bu yazıyı alıyorum acaba sebebi nedir php.ini den soapı aktif ettim

     
    • Göktuğ Öztürk

      20 Şubat 2014 at 15:18

      Bu hata wsdl dosyasını https protokolü üzerinden okuyamadığında ortaya çıkıyor.
      Muhtemelen test ortamında deneme yapıyorsunuz. Lokal PHP yapılandırmanızda OpenSSL ayarlarını kontrol edip hataları düzeltmeniz gerekiyor.
      Sunucu üzerinde bu ayarlar aktif olduğu için sorunsuz olarak çalışacaktır.

       
  9. Mehmet

    03 Şubat 2015 at 12:44

    Merhabalar wampda deneme yapıyorum fakat hiçbir şekilde hata döndürmüyor. Doğrula diyorum sayfa yenilenip tekrar geliyor. Neden olabilir

     
    • Göktuğ ÖZTÜRK

      11 Temmuz 2015 at 18:21

      Bu kodu uzun bir süredir güncellemiyordum.

      Benimde kendi projelerimde kullandığım daha düzgün olarak geliştirilmiş versiyonuna https://github.com/teknomavi/nvi adresinden ulaşabilirsiniz.

       
      • zeynel bozkurt

        05 Kasım 2015 at 11:19

        merhabalar..öncelikle paylaştığınız bilgiler için çok teşekkür ederi…en son güncellediğiniz kod yabancı uyruklular için de TC kontrolü yapıyor mu? Yada nasıl doğrulama yaptırabiliriz? Şimdiden teşekkürler

         
      • Göktuğ ÖZTÜRK

        13 Kasım 2015 at 11:53

        Eğer bir kişinin T.C. Kimlik Numarası varsa doğrulayabiliyor olmalı. Yabancılar için başka bir servis olacağını düşünmüyorum.

         
  10. ali gunendu

    14 Mart 2016 at 10:08

    Merhaba Göktuğ,

    bu kodu opencart 1.5.6 sürüm kullanan siteme nasıl entegre edebilirim. Alışveriş esnasında girilen form:

    Kişisel Bilgileriniz

    * Adınız:
    * Soyadınız:
    * E-Posta:
    * Telefon:
    Faks

    Adres Bilgileriniz:
    Şirket Adı:
    Vergi Dairesi:
    T.C./Vergi No:
    * Adres:
    * İlçe/Semt:
    Posta Kodu:
    * Ülke:
    * Şehir:

    T.C. Girişide zorunlu olacak ve sizin sistemle kontrolü sağlanacak şekilde nasıl ayarlayabilirim.

    sevgiler,

     
    • Göktuğ ÖZTÜRK

      27 Mart 2016 at 14:55

      Opencart’ın altyapısı hakkında bilgim yok maalesef. O yüzden sadece teorik olarak bilgi verebilirim.
      Sipariş esnasında kullanıcının doğum yılını ve TC kimilk numarasını da alman gerekiyor. Sonrasında bu bilgilerin gönderildiği controller’da ad, soyad, doğum yılı ve tc numarası ile doğrulama yapıp, eğer hata varsa uyarı mesajı gösterebilirsin.

      Bu arada, bu şekilde bir doğrulama yapan hiç bir e-ticaret firması görmedim. Böyle bir eklentinin kullanıcının sepetten çıkış oranını oldukça yükselteceğini düşünüyorum.

       
  11. AEG

    02 Temmuz 2016 at 23:30

    Merhabalar Hocam,
    öncelikle ellerinize saglik, cok güzel bir calisma olmus.
    Fakat sistemde sanirim bir hata var. Bir cok TC kimlik numarasini denedim ve herdefasinda ayni cevabi aldim: “Doğrulama Başarısız”!

    Yardimci olursaniz sevinirim.
    sevgiler.

     

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir