TC Kimlik No Algoritması

Merhaba değerli okurlar bugün bir TC  kimlik numarasını herhangi bir sistem veya benzeri birşey kullanmadan bir algoritma ile nasıl olması gerektiğini anlatacağım. Bu yöntemi kendi kimlik numaranızda da deneyebilirsiniz. Hatta bunun için bir sistem bile geliştirebilirsiniz.

TC Kimlik numaraları random bir şekilde oluşmaz bir düzeni ve yapısı vardır. Bazı karakterlerini bildiğiniz takdirde basit bir şekilde gerçek bir TC kimlik numarası olup olmadığını anlayabilirsiniz.

PHP de algoritmasını soracak olursanız ;


function tc($t) {
return preg_match('/^[1-9]\d{10}$/', $t) AND substr($t, 0, 10).((($t[0] + $t[1] + $t[2] + $t[3] + $t[4] + $t[5] + $t[6] + $t[7] + $t[8]) + (((($t[0] + $t[2] + $t[4] + $t[6] + $t[8]) * 7) - ($t[1] + $t[3] + $t[5] + $t[7])) % 10)) % 10) == $t;
}

if (tc('12345678900')) {
echo 'tc doğru';
} else {
echo 'tc yanlış';
}

bu kod ile php de bir TC kimlik numarasını doğrulayabilirsiniz.

Kısaca bahsetmek gerekirse ;

  • TC. kimlik numaraları 11 basamaklı olup, sadece rakamlardan oluşur. İlk 9 rakam arasındaki formül 10.cu rakamı, ilk 10 rakam arasındaki formülasyon ise 11.ci rakamı oluşturur.
  • İlk rakam 0 olamaz.
  • 1,3,5,7 ve 9.cu hanelerin toplamının 7 ile çarpımından 2,4,6, ve 8. haneler çıkartıldığında geriye kalan sayının 10’a göre modu 10. haneyi verir. (çıkarma işleminden elde edilen sonucun 10’a bölümünden kalan)
  • 1,2,3,4,5,6,7,8,9 ve 10. sayıların toplamının 10’a göre modu (10’a bölümünden kalan) 11. rakamı sağlar.

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

Bu kaba taslak anlatım şekli buna göre bir algoritma geliştirebilirsiniz.  Hazır bir python kodu paylaşacağım Halit Alptekin hocamın geliştirdiği algoritma;

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]

Bir cevap yazın