Rehber NVİ API kullanarak TC Kimlik Numarası doğrulama

Katılım
8 Nisan 2020
Mesajlar
7.701
Makaleler
7
Çözümler
93
Merhabalar. Geçen gün forumda da rastladım, web sitelerine TC Kimlik Numarası ekleyen kişiler var fakat nasıl doğrulayacaklarını bilmiyorlar. Hiçbir şekilde yasadışı yöntem kullanmaya gerek kalmadan, NVİ API ile nasıl doğrulama yapacağınızı göstereceğim.

Nüfus ve Vatandaşlık İşleri'nin bizlere sağlamış olduğu TC Kimlik Numarası doğrulama API'nı kullanacağınız. API linki:

Başlamadan önce, Win + R kombinasyonuyla Çalıştır'ı açın ve içerisine "php.ini" yazın. Açılan metin belgesinden CTRL + F kombinasyonu ile "soap" yazın. Şu değişikliği yapın:
Kod:
;extension=soap
extension=soap

Yani, başındaki noktalı virgülü kaldırın. Ardından kullandığınız programdan Apache hizmetini yeniden başlatın.

Basit bir form oluşturarak işe başlayabilirsiniz. Ben, sadece kodun temel mantığını göstermek için anlattığımdan dolayı herhangi bir CSS kullanmadan, sadece form oluşturdum. Görüntüsünü siz sonradan halledebilirsiniz.
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>TCKN Doğrula</title>
</head>
<body>
    <form action="form.php" method="POST">
        <label for="tckn">TC Kimlik Numarası</label>
        <input type="text" name="tckn" id="tckn" placeholder="TC Kimlik Numarası">
        <br>
        <label for="name">Ad</label>
        <input type="text" name="name" id="name" placeholder="Ad">
        <br>
        <label for="surname">Soyad</label>
        <input type="text" name="surname" id="surname" placeholder="Soyad">
        <br>
        <label for="dob">Doğum Yılı</label>
        <input type="text" name="dob" id="dob" placeholder="Doğum Yılı">
        <br>
        <button type="submit" name="submit">Doğrula</button>
    </form>
</body>
</html>

Devamında ise API'ı kullanarak bir istek oluşturacağız. Kodumuz şu şekilde:
PHP:
<?php

if($_POST['tckn'] && $_POST['name'] && $_POST['surname'] && $_POST['dob']) {

    $tckn = $_POST['tckn'];
    $name = $_POST['name'];
    $surname = $_POST['surname'];
    $dob = $_POST['dob'];

    try {

        $tcknApi = new SoapClient("https://tckimlik.nvi.gov.tr/service/kpspublic.asmx?WSDL");
        $params = [
            "TCKimlikNo" => $tckn,
            "Ad" => $name,
            "Soyad" => $surname,
            "DogumYili" => $dob
        ];

        $response = $tcknApi -> TCKimlikNoDogrula($params);
        if($response -> TCKimlikNoDogrulaResult) {
            echo 'Doğrulama başarılı.';
            exit;
        } else {
            echo 'Doğrulama başarısız.';
            exit;
        }

    }
    catch (PDOException $e) {
        die("Hata: " . $e->getMessage());
    }

} else {
    echo 'Bütün bilgileri doldurun.';
    exit;
}

İlk olarak formdan gelen verilerimizi çektik ve onları bir değişkene atadık. Ardından API'ı kullandık ve olumlu dönüş alırsak "Doğrulama Başarılı" yazısını yazdırdık. TCKimlikNoDogrula ve TCKimlikNoDogrulaResult hariç diğer bütün bölümleri kafanıza ve projenize göre değiştirebilirsiniz. Ben herhangi bir güvenlik fonksiyonu oluşturmadım veya kullanmadım. Onlara dikkat etmeyi unutmayın.

Anlatımım kötü olmuş olabilir, kusura bakmayın. Yardımcı olabildiysem ne mutlu. Sorularınızı sorabilirsiniz. İyi forumlar.

Projenin GitHub linki:

Videolu anlatım:
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
 
Hocam bunu flask ile nasıl yapabiliriz?
Yapınca yanıt vermiyor.
Şunu deneyebilirsiniz hocam:

Python:
from flask import Flask, request, jsonify
from zeep import Client

app = Flask(__name__)

NVI_URL = "https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL"

def dogrula_tc_kimlik(tc, ad, soyad, dogum_yili):
    try:
        client = Client(NVI_URL)
        sonuc = client.service.TCKimlikNoDogrula(
            TCKimlikNo=int(tc),
            Ad=ad.upper(),
            Soyad=soyad.upper(),
            DogumYili=int(dogum_yili)
        )
        return {"dogrulama": sonuc}
    except Exception as e:
        return {"hata": str(e)}

@app.route("/dogrula", methods=["POST"])
def dogrula():
    data = request.json

    if not all(k in data for k in ("tckn", "name", "surname", "dob")):
        return jsonify({"hata": "Eksik parametreler"}), 400

    sonuc = dogrula_tc_kimlik(data["tckn"], data["name"], data["surname"], data["dob"])
    return jsonify(sonuc)

if __name__ == "__main__":
    app.run(debug=True)
 
Şunu deneyebilirsiniz hocam:

Python:
from flask import Flask, request, jsonify.
from zeep import Client.

app = Flask(__name__)

NVI_URL = "https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL"

def dogrula_tc_kimlik(tc, ad, soyad, dogum_yili):
 try:
 client = Client(NVI_URL)
 sonuc = client.service.TCKimlikNoDogrula(
 TCKimlikNo=int(tc),
 Ad=ad.upper(),
 Soyad=soyad.upper(),
 DogumYili=int(dogum_yili)
 )
 return {"dogrulama": sonuc}
 except Exception as e:
 return {"hata": str(e)}

@app.route("/dogrula", methods=["POST"])
def dogrula():
 data = request.json

 if not all(k in data for k in ("tckn", "name", "surname", "dob")):
 return jsonify({"hata": "Eksik parametreler"}), 400.

 sonuc = dogrula_tc_kimlik(data["tckn"], data["name"], data["surname"], data["dob"])
 return jsonify(sonuc)

if __name__ == "__main__":
 app.run(debug=True)

1739128316476.png


Hocam bir türlü yanıt verditemedim PHP harici node.js ile denedim flask ile denedim yine olmadı.
 
Projesine eklemek isteyen varsa maalesef KPSPublic servisi kapatılacakmış.

Kaynak: tckimlik.nvi.gov.tr

"Genel Müdürlüğümüz Online Sorgulamalar - Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü public web sayfası doğrulama servisleri 01.08.2025 tarihinde kapatılacağı belirtilmiş olup... Entegrasyon süreçlerinin devam etmesinden dolayı web sayfası doğrulama servislerinin kapatılması 30.09.2025 tarihine kadar uzatılmıştır. Not: Genel Müdürlüğümüz Online Sorgulamalar - Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü public web sayfası doğrulama servisleri ekran hizmeti olarak kullanıma açık kalmaya devam edecektir."
 
Projesine eklemek isteyen varsa maalesef KPSPublic servisi kapatılacakmış.

Kaynak: tckimlik.nvi.gov.tr

"Genel Müdürlüğümüz Online Sorgulamalar - Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü public web sayfası doğrulama servisleri 01.08.2025 tarihinde kapatılacağı belirtilmiş olup... Entegrasyon süreçlerinin devam etmesinden dolayı web sayfası doğrulama servislerinin kapatılması 30.09.2025 tarihine kadar uzatılmıştır. Not: Genel Müdürlüğümüz Online Sorgulamalar - Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü public web sayfası doğrulama servisleri ekran hizmeti olarak kullanıma açık kalmaya devam edecektir."
Bildirdiginiz icin tesekkürler. Farklı bir alternatif arayalim.
 
Merhaba, bugün itibariyle kullanıma kapatılmış web siteme entegre çalışan bi api ydi. Alternatifi nedir bilen var mı ?
 

Technopat Haberler

Yeni konular

Geri
Yukarı