TC Kimlik No Doğrulama
TC kimlik no doğrulama için numarayı yapıştır, dört kuralın her birini ayrı ayrı gör. Tek numara ya da 10.000 satır, hepsi tarayıcında kontrol edilir.
Dene:
| # | Numara | Durum | Neden |
|---|
TC kimlik no doğrulama rehberi
Algoritmanın dört kuralı, yakaladığı ve yakalayamadığı hatalar, formlarda doğru doğrulama ve hazır kod.
TC kimlik no doğrulama nasıl yapılır?
TC kimlik no doğrulama, bir numaranın algoritmanın dört koşulunun hepsini sağlayıp sağlamadığına bakar. Numara tam 11 rakamdan oluşmalı ve ilk hanesi 0 olmamalıdır. 10. hane, 1, 3, 5, 7 ve 9. hanelerin toplamının 7 katından 2, 4, 6 ve 8. hanelerin toplamı çıkarılıp 10'a bölündüğünde kalan sayıya eşit olmalıdır. 11. hane ise ilk 10 hanenin toplamının birler basamağıdır.
Örneğin 10000000146 numarasında tek sıradaki hanelerin toplamı 2, çift sıradakilerin toplamı 0'dır. 2 × 7 − 0 = 14 ve 14'ün 10'a bölümünden kalan 4'tür; 10. hane gerçekten 4. İlk 10 hanenin toplamı 6 eder, 11. hane de 6. Dört kural da sağlandığı için numara algoritmaya uygundur. Yukarıdaki kutuya bu numarayı yazarak her adımı görebilirsin.
Günlük dilde "TC no kontrol" ya da "TC kimlik numarası kontrol etme" olarak da geçen bu işlem tamamen matematiktir: hiçbir veritabanına bağlanmaz, internet bağlantısı bile gerektirmez. Bu yüzden sonuç anında gelir ve yazdığın numara hiçbir yere gönderilmez.
Toplu TC kimlik doğrulama
Bir veri setini, müşteri listesini ya da içe aktarılacak bir dosyayı kontrol ediyorsan numaraları tek tek yazman gerekmez. Üstteki "Toplu kontrol" sekmesine 10.000 satıra kadar numara yapıştırdığında her satır ayrı ayrı doğrulanır; geçersiz olanların yanında hangi kuralın tutmadığı yazar. Geçerli ve geçersiz numaraları ayrı ayrı kopyalayabilir ya da sonucun tamamını CSV olarak indirip Excel'de açabilirsin. Toplu TC kimlik doğrulama, özellikle eski bir sistemden veri taşırken hatalı kayıtları ayıklamak için işe yarar.
Algoritma hangi hataları yakalar?
Kontrol haneleri, numara elle yazılırken yapılan hataları yakalamak için tasarlanmıştır. 11 hanenin herhangi birinde tek bir rakam yanlış yazılırsa kontrol her zaman başarısız olur: değişen rakam 10. hanenin beklenen değerini ya da 11. hanenin toplamını mutlaka bozar. Eksik ya da fazla hane, başa yazılan 0 ve kopyalarken araya giren harfler de doğrudan yakalanır.
Yakalanmayan tek tip hata
İlk 9 hane içinde yan yana duran iki rakamın yer değiştirmesi çoğu zaman yakalanır, ama her zaman değil. İki rakam arasındaki fark 5 ise (1 ile 6, 2 ile 7, 3 ile 8, 4 ile 9, 0 ile 5) yer değiştirme 10. hanenin hesabını değiştirmez ve toplam da aynı kalır. Bu yüzden algoritmadan geçen bir numara, yine de yanlış girilmiş olabilir.
Algoritma kontrolü ile NVİ sorgusu arasındaki fark
"TC kimlik doğrulama" denince iki farklı iş anlaşılabilir. TC kimlik no doğrulama yalnızca numaranın biçimini kontrol eder; bu numaranın bir kişiye verilip verilmediğini bilemez. Kimliğin gerçekten var olduğunu ve ad, soyad, doğum yılı gibi bilgilerle eşleştiğini yalnızca yetkili kurumlar Nüfus ve Vatandaşlık İşleri'nin kimlik paylaşım servisleri üzerinden sorgulayabilir. Bu araç böyle bir sorgu yapmaz; kişinin adını ya da bilgilerini bulmaya yönelik TC kimlik numarası sorgulama hizmeti sunmaz.
Çoğu kayıt ve ödeme formunda ilk adım algoritma kontrolüdür: kullanıcıya yazım hatasını anında gösterir ve gereksiz sunucu isteklerini önler. Gerçek kimlik eşleştirmesi gerekiyorsa bu, yetkili bir servisle arka planda ayrıca yapılır.
Formlarda TC kimlik numarası doğrulama
Alanı type="number" yerine inputmode="numeric" olan bir metin alanı olarak tanımla. Böylece mobilde rakam klavyesi açılır, ama tarayıcı numarayı sayıya çevirmeye ya da artırma oklarıyla değiştirmeye çalışmaz. Numarayı veritabanında da metin olarak sakla; üzerinde aritmetik işlem yapılmayan bir kimliktir.
Hata mesajı da en az kontrolün kendisi kadar önemlidir. "Geçersiz TC kimlik numarası" gibi genel bir uyarı yerine kullanıcıya neyin yanlış olduğunu söyle: "11 hane olmalı", "0 ile başlayamaz" ya da "numarada yazım hatası var, lütfen kontrol et". Kullanıcı yazarken anlık TC no kontrol yapmak yerine alandan çıktığında uyarmak da yarım yazılmış numaralarda gereksiz kırmızı uyarıların önüne geçer. İyi bir TC kimlik doğrulama deneyimi, formun terk edilme oranını düşürür.
TCKN doğrulama fonksiyonunu hem tarayıcıda hem sunucuda çalıştır. Tarayıcıdaki kontrol kullanıcıya hızlı geri bildirim verir, sunucudaki kontrol ise formu atlayarak gönderilen hatalı verinin kaydedilmesini engeller. Kimlik numarası bilinmeyen nihai tüketiciye kesilen e-Arşiv faturalarda kullanılan 11111111111 algoritmadan geçmez; fatura yazılımında bu istisnayı ayrıca ele almalısın.
Testlerinde kullanacağın geçerli numaraları TC kimlik no üretici ile, binlerce satırlık veri setlerini toplu üretici ile hazırlayabilirsin.
function tcknGecerliMi(no) {
no = String(no).trim();
if (!/^[1-9]\d{10}$/.test(no)) return false;
const d = [...no].map(Number);
const tek = d[0] + d[2] + d[4] + d[6] + d[8];
const cift = d[1] + d[3] + d[5] + d[7];
const h10 = ((tek * 7 - cift) % 10 + 10) % 10;
const h11 = d.slice(0, 10).reduce((a, b) => a + b, 0) % 10;
return d[9] === h10 && d[10] === h11;
}
function tcknGecerliMi(string $no): bool
{
if (!preg_match('/^[1-9][0-9]{10}$/', $no)) return false;
$d = array_map('intval', str_split($no));
$tek = $d[0] + $d[2] + $d[4] + $d[6] + $d[8];
$cift = $d[1] + $d[3] + $d[5] + $d[7];
$h10 = (($tek * 7 - $cift) % 10 + 10) % 10;
$h11 = array_sum(array_slice($d, 0, 10)) % 10;
return $d[9] === $h10 && $d[10] === $h11;
}
def tckn_gecerli_mi(no: str) -> bool:
if len(no) != 11 or not (no.isascii() and no.isdigit()) or no[0] == "0":
return False
d = [int(c) for c in no]
tek = d[0] + d[2] + d[4] + d[6] + d[8]
cift = d[1] + d[3] + d[5] + d[7]
h10 = (tek * 7 - cift) % 10
h11 = sum(d[:10]) % 10
return d[9] == h10 and d[10] == h11
Sık sorulan sorular
Doğrulama sonucu, gizlilik ve hata mesajları hakkında merak edilenler.
TC kimlik no doğrulama numaranın gerçek bir kişiye ait olduğunu gösterir mi?
Hayır. Araç yalnızca numaranın TC kimlik algoritmasına uyup uymadığını kontrol eder. Kişinin var olup olmadığını, adını ya da başka bir bilgisini göstermez ve sorgulamaz; TC kimlik numarası sorgulama hizmeti sunmaz.
"Geçerli" çıkan bir numara kullanılabilir mi?
Geçerli sonuç, numaranın biçim olarak doğru yazıldığını gösterir. Bir formda kullanıcıdan alınan numaranın yazım hatası içermediğini anlamak için yeterlidir; kimlik doğrulama yerine geçmez.
Toplu TC kimlik doğrulama ile kaç numara kontrol edebilirim?
Tek seferde 10.000 satıra kadar yapıştırabilirsin. Sonuçlar anında hesaplanır; tablonun tamamını CSV olarak indirebilir, geçerli ya da geçersiz numaraları ayrı ayrı kopyalayabilirsin.
Yapıştırdığım numaralar bir yere gönderiliyor mu?
Hayır. Kontrol tamamen tarayıcında çalışır. Numaralar sunucuya gönderilmez, kaydedilmez ve günlüklere yazılmaz.
11111111111 neden geçersiz çıkıyor?
Bu numara e-Arşiv faturalarda kimliği bilinmeyen alıcı için kullanılır. 10. hane kuralını sağlar ama 11. hane 0 olmalıyken 1'dir, bu yüzden algoritmadan geçmez.
Yabancı kimlik numaraları da doğrulanır mı?
Araç, 99 ile başlayan numaraları da TC kimlik algoritmasıyla kontrol eder; yazılımlar yabancı kimlik numaralarını genellikle bu şekilde doğrular. Test için yabancı kimlik no üretici sayfasını kullanabilirsin.
Boşluk, tire ya da nokta içeren numaralar ne olur?
Araç rakam dışındaki karakterleri yok sayar; "123 456 789 01" gibi yazılmış bir numara da kontrol edilir. Kendi kodunda girişi temizleyip temizlemeyeceğine sen karar vermelisin.
Doğrulamayı istemcide mi sunucuda mı yapmalıyım?
İkisinde de. Tarayıcıdaki kontrol kullanıcıya anında geri bildirim verir; sunucudaki kontrol ise isteği atlayarak gönderilen hatalı verinin veritabanına girmesini engeller.
Aynı işte lazım olacak diğer araçlar
Vergi numarası, IBAN, test kartı ve sahte kişi verisi: hepsi aynı mantıkla, tarayıcında.