TC Kimlik No Algoritması

TC kimlik no algoritmasını adım adım izle: ilk 9 haneyi yaz, son iki hanenin nasıl hesaplandığını gör. Aşağıda aynı algoritmanın 8 dilde kodu var.

$ tckn --hesapla
Adım 1

Tek sıradakileri topla

1, 3, 5, 7, 9. haneler: 2 + 1 + 4 + 4 + 8 = 19

Adım 2

Çift sıradakileri topla

2, 4, 6, 8. haneler: 9 + 0 + 6 + 4 = 19

Adım 3

10. haneyi bul

(19 × 7 + 19 × 9) mod 10 = 304 mod 10 = 4

Adım 4

11. haneyi bul

ilk 10 hanenin toplamı 42 mod 10 = 2 · kısa yol: 8 × 19 mod 10 = 2

Sonuç29104644842

TC kimlik no algoritması: tuzakları ve ilginç özellikleri

Kuralların tam tanımı, kod yazarken düşülen negatif mod tuzağı, 11. hane için kısa yol ve algoritmanın hangi hataları yakaladığı.

TC kimlik no algoritmasının dört kuralı

Bir TC kimlik numarası 11 haneden oluşur. İlk 9 hane kişiye atanır, son 2 hane bu 9 haneden hesaplanan kontrol haneleridir. TC kimlik no algoritması, yani TC kimlik numarası algoritması, bu iki kontrol hanesinin nasıl hesaplandığını tanımlar. Geçerli bir numara dört kuralın hepsini sağlar:

1. Numara tam 11 rakamdır. 2. İlk hane 0 değildir. 3. 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ıdır. 4. 11. hane, ilk 10 hanenin toplamının 10'a bölümünden kalandır.

Örnek hesap: 10000000146

Tek sıradaki haneler 1, 0, 0, 0, 1; toplamları 2. Çift sıradaki haneler 0, 0, 0, 0; toplamları 0. 10. hane: 2 × 7 − 0 = 14, 14'ün 10'a bölümünden kalan 4. İlk 10 hane 1, 0, 0, 0, 0, 0, 0, 0, 1, 4; toplamları 6, yani 11. hane 6. Numara dört kuralı da sağlar. Yukarıdaki hesaplayıcıya 100000001 yazarak aynı adımları görebilirsin.

Kod yazarken negatif mod tuzağı

TC kimlik no algoritmasını kodlarken en sık yapılan hata budur. Formüldeki çıkarma işlemi negatif bir sonuç verebilir: tek sıradaki haneler 1, 0, 0, 0, 0 ve çift sıradakiler 9, 9, 9, 9 ise 1 × 7 − 36 = −29 olur. Python bu durumda −29 mod 10 için 1 döndürür. JavaScript, Java, C# ve Go ise kalanın işaretini bölünen sayıdan aldığı için −9 döndürür ve doğrulama yanlış sonuç verir.

Bu tuzaktan iki yolla kaçınırsın: sonuca 10 ekleyip yeniden mod almak, ya da −1 yerine 9 ile çarpmak. 10'a göre −1 ile 9 aynı kalanı verdiği için (tek × 7 + çift × 9) mod 10 her zaman doğru ve pozitif sonuç üretir. Bu sayfadaki bütün kod örnekleri ikinci yolu kullanır.

11. hane için kısa yol

İlk 10 hanenin toplamı, tek sıradakilerin toplamı, çift sıradakilerin toplamı ve 10. haneden oluşur. 10. hanenin yerine formülünü yazınca tek + çift + (7 × tek − çift) = 8 × tek kalır; çift sıradaki haneler birbirini götürür. Yani 11. hane, tek sıradaki hanelerin toplamının 8 katının birler basamağıdır. Hesaplayıcının son adımı bu kısa yolu da gösterir.

Algoritmanın yakaladığı hatalar

Kontrol haneleri, numara elle yazılırken yapılan tek rakamlık hataların tamamını yakalar. Yan yana iki rakamın yer değiştirmesi ise çoğu zaman yakalanır; farkı 5 olan rakamlar (1 ile 6, 2 ile 7 gibi) yer değiştirirse hesap değişmez. Ayrıntılar için TC kimlik no doğrulama sayfasına bak.

Kaç tane geçerli TC kimlik numarası var?

İlk hane 1 ile 9 arasında 9 farklı değer, sonraki 8 hane 10'ar farklı değer alabilir; son iki hane bunlardan hesaplanır. Toplam 9 × 10⁸, yani 900 milyon numara algoritmaya uyar. Bu sayı, rastgele üretilen numaraların neden zaman zaman çakıştığını da açıklar: 10.000 rastgele numara arasında en az bir tekrar çıkma olasılığı yaklaşık yüzde 5'tir. Benzersiz listeler için toplu üreticiyi kullan.

Kendi kodunu test etmek için örnek numaralar

Yazdığın TC kimlik doğrulama kodunu aşağıdaki numaralarla sınayabilirsin. Her biri farklı bir kuralı dener; kodun hepsinde beklenen sonucu veriyorsa TC kimlik no hesaplama mantığın doğrudur.

NumaraBeklenenNeyi dener?
10000000146GeçerliDört kuralın hepsi sağlanıyor
12345678950GeçerliArdışık rakamlar; 10. hane 155 mod 10 = 5
10000000147GeçersizYalnızca 11. hane hatalı
10000000156Geçersiz10. hane hatalı; 11. hane de buna bağlı olarak tutmaz
11111111111Geçersize-Arşiv istisnası: 10. hane tutar, 11. hane tutmaz
01234567840GeçersizKontrol haneleri doğru ama ilk hane 0
1000000014Geçersiz10 hane

En çok atlanan durum 01234567840'tır: kontrol haneleri doğru hesaplandığı için yalnızca son iki haneye bakan bir kod bu numarayı yanlışlıkla geçerli sayar.

function tcknGecerliMi(no) {
  if (!/^[1-9]\d{10}$/.test(String(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 toplam = d.slice(0, 10).reduce((a, b) => a + b, 0);
  return d[9] === (tek * 7 + cift * 9) % 10 && d[10] === toplam % 10;
}

Sık sorulan sorular

Kontrol haneleri, formüller ve kodlama hakkında sık gelen sorular.

TC kimlik no algoritması resmi mi?

TC kimlik algoritması resmi bir teknik standart olarak yayımlanmamıştır, ama geçerli TC kimlik numaralarının tamamı bu iki kontrol kuralına uyar. Bankalar, e-ticaret siteleri ve kamu yazılımları numaraları bu kurallarla doğrular.

Kaç tane geçerli TC kimlik numarası olabilir?

İlk hane 1 ile 9 arasında, sonraki 8 hane serbest, son 2 hane hesaplandığı için 9 × 10⁸ = 900 milyon farklı numara algoritmaya uyar.

10. hane formülünde neden 9 ile çarpılıyor?

(tek × 7 − çift) mod 10 ile (tek × 7 + çift × 9) mod 10 her zaman aynı sonucu verir, çünkü 10'a göre −1 ile 9 eşittir. İkinci yazım negatif sayı üretmediği için JavaScript, Java, C# ve Go'daki negatif mod tuzağına düşmez.

11. hane için kısa bir yol var mı?

Evet. 11. hane, tek sıradaki hanelerin toplamının 8 katının 10'a bölümünden kalana eşittir. İlk 10 hanenin toplamında 10. hanenin yerine formülü yazınca çift sıradaki haneler birbirini götürür ve geriye 8 × tek kalır.

Algoritmaya uyan her numara gerçek mi?

Hayır. Algoritma yalnızca numaranın biçimini doğrular. 900 milyon olası numaranın yalnızca bir kısmı gerçekten bir kişiye verilmiştir; hangisinin verildiğini yalnızca yetkili kurumlar sorgulayabilir.

Kodları projemde kullanabilir miyim?

Evet. Sayfadaki kod örneklerini istediğin projede serbestçe kullanabilirsin. JavaScript, TypeScript, Python, PHP, C# ve SQL örnekleri yayınlanmadan önce test edilmiştir.

Yabancı kimlik numaraları da bu algoritmaya uyar mı?

99 ile başlayan yabancı kimlik numaraları yazılımlarda genellikle aynı kurallarla doğrulanır. Bu tür test numaralarını yabancı kimlik no üretici ile hazırlayabilirsin.