T.C. Kimlik No Doğrulama (Validation): Algoritma Matematiği ve SOAP API Entegrasyonu
E-ticaret sitelerinden kargo otomasyonlarına kadar pek çok web platformunda kullanıcıdan "T.C. Kimlik Numarası" istenir. Kullanıcıların formu hızlıca geçmek için "11111111111" gibi sahte veriler (Dummy data) girmesini engellemek, form validasyonunun (Validation) ilk adımıdır. Ancak bir kimlik numarasının 11 haneli veya rakamlardan oluştuğunu kontrol eden basit "Regex" kalıpları yetersizdir. Geliştirdiğimiz T.C. Kimlik Doğrulayıcı, arka planda Nüfus ve Vatandaşlık İşleri (NVİ) tarafından belirlenen kriptografik (Checksum) Modulo 10 Matematiğini kullanarak verinin "Algoritmik" olarak geçerli olup olmadığını tespit eder.
Özellikle e-fatura/e-arşiv (Gib) kesimi yapan B2B veya B2C yazılımlarında hatalı bir T.C. numarası tüm mali kayıt zincirini (Chain) bozabilir. Bu nedenle bu doğrulama algoritması, sunucu (Backend) tarafına yük bindirmeden önce mutlaka Frontend (İstemci) tarafında çalıştırılmalıdır.
T.C. Kimlik Numarası Algoritması Nasıl Çalışır?
11 haneli T.C. Kimlik numaraları aslında rastgele rakamlardan oluşmaz. Sadece ilk 9 hane rastgeledir; son 2 hane (10. ve 11. karakterler) ilk 9 hanenin matematiksel sağlama (Parity/Checksum) bitleridir. Algoritmanın kuralları şu şekildedir:
- Kural 1 (Temel Kurallar): T.C. Kimlik Numarası tam olarak 11 haneli olmalıdır ve sadece rakamlardan (0-9) oluşmalıdır. En önemli kural: İlk hane (1. rakam) asla "0" (Sıfır) olamaz.
- Kural 2 (10. Hane Hesabı - Modulo 10): 1., 3., 5., 7. ve 9. hanelerin (Tek haneler) toplamı 7 ile çarpılır. Bu değerden 2., 4., 6. ve 8. hanelerin (Çift haneler) toplamı çıkartılır. Elde edilen sonucun 10'a bölümünden kalan (Mod 10), bize doğrudan 10. haneyi verir.
- Kural 3 (11. Hane Hesabı): İlk 10 hanenin (1. haneden 10. haneye kadar) tamamı toplanır. Bu toplam değerin 10'a bölümünden kalan (Mod 10) sonuç ise bize 11. haneyi vermek zorundadır.
Format Doğrulaması (Syntax) vs Gerçek Doğrulama (SOAP API)
Yazılımcıların en büyük yanılgısı, algoritmayı geçen bir kimlik numarasının gerçekten bir vatandaşa ait olduğunu düşünmektir. Algoritma (Aracımızın yaptığı gibi) sadece dizilimin matematiğini doğrular. O numaranın gerçekten Ahmet Yılmaz'a ait olup olmadığını anlamanın tek yolu KPS Public SOAP Servisi'dir.
🛡️ İstemci Tarafı (Client-Side) Check
Matematiksel Modulo 10 kontrolüdür. Veritabanına istek atmaz (Zero-latency). Kullanıcı yanlışlıkla bir rakamı eksik veya hatalı yazdığında anında uyarı vererek UX'i (Kullanıcı Deneyimi) artırır ve sunucuyu gereksiz API çağrılarından kurtarır.
📡 Nüfus Müdürlüğü (NVİ) SOAP Servisi
Arka planda (Backend - PHP/Node.js) tckimlik.nvi.gov.tr/Service/KPSPublic.asmx adresine XML formatında TC, Ad, Soyad ve Doğum Yılı gönderilir. Devlet sunucuları veri tabanına bakar ve "True" veya "False" döner. Yasal KYC (Müşteri Tanıma) işlemlerinde mecburidir.
Sıkça Sorulan Sorular (S.S.S.)
Bu araca girdiğim T.C. Kimlik Numarası sunucuya kaydediliyor mu?
Kesinlikle hayır! Bu platform "Privacy by Design" (Tasarım gereği gizlilik) ilkesini benimser. Bu araçtaki doğrulama işlemi %100 oranında tarayıcınızın içinde (JavaScript) gerçekleşir. Ağ sekmesine (Network tab) bakarsanız sunucuya hiçbir "POST" isteği gitmediğini görebilirsiniz.
"Geçerli format" sonucu numaranın gerçek olduğunu mu gösterir?
Hayır. Yalnızca numaranın T.C. kimlik algoritmasına (Modulo 10 kontrol basamakları) uyduğunu gösterir. Kişiye ait olup olmadığı ve ad-soyad eşleşmesi yalnızca Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü'nün (NVİ) resmî KPS SOAP hizmetleriyle doğrulanabilir.
İlk hane neden 0 olamaz?
T.C. kimlik numarası sisteminde ilk hane 0 olarak verilmez. Bu nedenle 0 ile başlayan her 11 haneli sayı doğrudan geçersiz kabul edilir.
Yabancı Uyruklu (99 ile başlayan) kimlik numaraları da bu algoritmaya uyuyor mu?
Evet. Türkiye'de ikamet eden yabancı uyruklu (YKN - Yabancı Kimlik Numarası) vatandaşlara verilen ve "99", "98" ile başlayan kimlik numaraları da birebir aynı Modulo 10 kriptografik algoritmasıyla üretilir. Araç bu numaraları da sorunsuz doğrular.
Başkasının kimlik numarasını kontrol edebilir miyim?
Araç yalnızca matematiksel bir format kontrolü yapar; kişisel veri işlemez. Ancak başkasına ait kimlik bilgilerini izinsiz toplamak, kaydetmek veya paylaşmak 6698 sayılı KVKK mevzuatına aykırıdır; yalnızca kullanma yetkiniz olan bilgilerle işlem yapınız.
Node.js, PHP veya Python formlarınızın "Submit" (Gönder) eventinden hemen önce, elinizdeki kimlik verisinin yasal formata uygun olup olmadığını test etmek için T.C. Kimlik Algoritması Doğrulayıcı aracımızı kullanabilirsiniz.