TC Kimlik No Algoritması

Algoritma deyince aklıma ilk gelen nedense hep Tc Kimlik No algoritması oluyor.Bunun sebebi en başlarda çok ilginç gelmesi ve başlarda çok fazla ilgilenmem.Çunku bu algoritmayı oğrenince elinize bir kağıt kalem alıp başka kişilerin de Tc Kimlik numaralarının bilinmeyen 2 numarasını bulabiliyorsunuz.Tabi bu algoritma ile sadece kayıp numaralar bulunmuyor.Bir Tc Kimlikten yola çıkarak akrabalarınızın da Tc Kimlik Numaralarına ulaşabiliyorsunuz.

Ben de son gunlerde bir hayli fazla bir şekilde PyQt ile ilgilendiğim için aklıma gelen her programı yapmaya çalışıyorum.Bazıları gerçekten işe yarayan şeyler olmasına rağmen bazılarında baya bi saçmalıyorum.Ama sonuç olarak kendimi bu alanda bir hayli geliştiriyorum.

Yaptığım programa geçmeden once algoritmanın nasıl işlediğini anlatmak gerekirse:

TC Kimlik numaraları 11 basamaktan oluşmaktadır.

İlk 9 basamak arasında kurulan bir algoritma bize 10. basmağı, ilk 10 basamak arasında kurulan algoritma ise bize 11. basamağı verir.

11 hanelidir.

Her hanesi rakamsal değer içerir.

İlk hane 0 olamaz. 1. 3. 5. 7. ve 9. hanelerin toplamının 7 katından, 2. 4. 6. ve 8. hanelerin toplamı çıkartıldığında, elde edilen sonucun 10'a bolumunden kalan, yani Mod10'u bize 10. haneyi verir.

                  1. ve 10. hanelerin toplamından elde edilen sonucun 10'a bolumunden kalan, yani Mod10'u bize 11. haneyi verir.

Bu Tc Kimliği doğrulama için kullanılacak olan algoritma.Bir de akraba algoritması var.Buda aynen şu şekilde.

Rastgele bir tc no yazalım ( ilk 9 hane ):342165846

Bunu ilk 5 ve son 4 hane olacak şekilde parçalıyoruz.

Sizden yaşca aşağı inmek için (Kardeş , Kuzen vs.)

34216 => 5 basamaklı bu sayıyı 6 azaltıyoruz.

5846 => 4 basamaklı bu sayıyı 2 artırıyoruz.

Yeni ilk 9 hanemiz = 342105848

Sizden yaşca yukarı çıkmak için (Baba,amca vs.)

34216 => 5 basamaklı bu sayıyı 6 artırıyoruz.

5846 => 4 basamaklı bu sayıyı 2 azaltıyoruz.

Yeni ilk 9 hanemiz = 342225844

İşte bizlere verilen Tc Kimlik Numaraları bu şekilde oluşturulmuş.Ben denediğim tum hepsinde gayet guzel çalıştı.Hatta kendi programımda tum ailenin tc kimlik numaralarını başarıyla buldu.

def tcno_checksum(tcno):
    if len(str(tcno)) == 9:
        tc    = '%d' % tcno
        tc10  = int(tc[0]) %2B int(tc[2]) %2B int(tc[4]) %2B int(tc[6]) %2B int(tc[8])
        tc10 *= 7
        tc10 -= int(tc[1]) %2B int(tc[3]) %2B int(tc[5]) %2B int(tc[7])
        tc10 %= 10
        tc11  = int(tc[0]) %2B int(tc[1]) %2B int(tc[2]) %2B int(tc[3]) %2B int(tc[4])
        tc11 %2B= int(tc[5]) %2B int(tc[6]) %2B int(tc[7]) %2B int(tc[8]) %2B int(tc10)
        tc11 %= 10
        return '%s%d%d' % (tc, tc10, tc11)
    else:
        return 0

def akraba_tcno(tcno, adet):
    akraba_liste = ''
    tc   = int(tcno[0:-2])
    t    = tc - 29999 * (1 %2B int(adet / 2))
    for i in range(adet%2B1):
        t %2B= 29999
        atc = tcno_checksum(t)
        if atc == tcno:
            pass
        else:
            akraba_liste %2B= "'%s'," % atc
    return akraba_liste[0:-1]

Bu kullandığım python kodu.Tüm kodlara ve ui tasarımlarına github depomdan ulaşabilirsiniz.Bu algoritma için yazdığım PyQt programın ekran görüntüsü aşağıdadır.

Tc Kimlik No Algoritmasi

comments powered by Disqus