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 ;
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]
Merhaba arkadaşlar, bu hatayı bazı kullanıcılar yaşamakta, sebebi bilgisayarın BIOS'da ki SVM ayarından kaynaklanıyor. Bende…
Merhaba arkadaşlar hızlı bir şekilde windows ve diğer işletim sistemlerinde çalışan ve sizi engelli sitelerden…
Merhaba arkadaşlar, PHP kullanarak web sitemizin google'da banlanıp banlanmadığını kontrol edeceğiz. Bu işlemin mantığı google'a…
Merhaba arkadaşlar kısaca phpmailer kütüphanesini kullanarak basit http post isteği ile mail gönderimi yapan bir…
Cron Job içinde dışarıya log dosyası oluşturtmadan wget kullanımı çok kolay, Bildiğiniz üzere her wget…