Categories: Genel

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]
Admin

enesphp@gmail.com

Recent Posts

Windows Ücretsiz VPN Nasıl Kurulur

Merhaba arkadaşlar hızlı bir şekilde windows ve diğer işletim sistemlerinde çalışan ve sizi engelli sitelerden…

3 ay ago

Google Ban Kontrolü PHP

Merhaba arkadaşlar, PHP kullanarak web sitemizin google'da banlanıp banlanmadığını kontrol edeceğiz. Bu işlemin mantığı google'a…

1 yıl ago

PHP ile Mail Gönderme API

Merhaba arkadaşlar kısaca phpmailer kütüphanesini kullanarak basit http post isteği ile mail gönderimi yapan bir…

1 yıl ago

DNS Nedir

DNS, Domain Name System kelimelerinin kısaltmasıdır. İnternetin işleyişinde çok önemli bir rol oynayan DNS, internet…

1 yıl ago

Cpanel Cronjob Wget Log Dosyası Engelleme

Cron Job içinde dışarıya log dosyası oluşturtmadan wget kullanımı çok kolay, Bildiğiniz üzere her wget…

1 yıl ago

PHP ile SSL Checker Yapımı

PHP ile bir SSL sertifikasının geçerli olup olmadığını denetlemek için aşağıdaki kod kullanılabilirsiniz. <?php $url…

1 yıl ago