T.C. Kimlik No Akraba Algoritması

Rom.

Rektör
Emektar
Katılım
11 Aralık 2008
Mesajlar
15,332
Reaksiyon puanı
177
Puanları
243
Konum
Ankara
"T.C. Kimlik No Algoritması" yazısını okuduktan sonra bu numaralar ilgimi çekmeye başladı ve akrabaların kimlik numaraları arasında benzerlik varmı diye merak etmeye başladım.Biraz uğraşınca ortaya çıktı.. Kimlik numaraları bilindiği gibi 11 hanelidir.Önemli olan ilk 9 hanesidir.Son iki hanesi doğrulama amaçlıdır.

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​

Son iki haneyi bulmak için ilk 9 haneden yararlanıyoruz.Onun içinde


Bu yazıyı okuyabilirsiniz.


Yalnız bu aşağı yukarı yön sistemi her zaman çalışmıyor alakasız sonuçlarda çıkarabiliyor.Bir süre sonra başka bir soyadınada geçebiliyor

Python ile girilen bir kimlik numarasından istenilen sayıda tc no üreten bir program yazmıştım onuda paylaşayım.

http://www.yak0.com/download/tcuretici.rar

sc.JPG


Php ile bu işlemi yapan bir kaç satır kod yazalım..

PHP:
<?php
function guvenlik($tc){  // İlk 9 haneden son 2 haneyi hesaplayan fonksiyon
$bir=substr($tc,-9,1);
$iki=substr($tc,-8,1);
$uc=substr($tc,-7,1);
$dort=substr($tc,-6,1);
$bes=substr($tc,-5,1);
$alti=substr($tc,-4,1);
$yedi=substr($tc,-3,1);
$sekiz=substr($tc,-2,1);
$dokuz=substr($tc,-1,1);


$tekler=$bir+$uc+$bes+$yedi+$dokuz;
$ciftler=$iki+$dort+$alti+$sekiz;


$islem=$tekler*7-$ciftler;
$on = $islem % 10 ;  // Mod 10 alıyoruz.


$ilkon=$tekler+$ciftler+$on;
$onbir = $ilkon % 10 ;


$yenino=$bir.$iki.$uc.$dort.$bes.$alti.$yedi.$sekiz.$dokuz.$on.$onbir;
return $yenino;


}




function akrabayap($tcx,$yon,$kactane) {  //Kimlik no oluşturma fonksiyonu
$tc = $tc=substr($tcx,0,9);  // ilk dokuz haneyi alıyoruz 
$ilkbes=substr($tc,0,5);  //ilk bes 
$sondort=substr($tc,-4,4);  //son dort seklinde ayırıyoruz


if ($yon == 0) // Üretme yönünü kontrol ediyoruz. Sıfırsa aşağı 1 ise yukarı
{
for ($i = 1; $i <= $kactane ; $i++ ) 
{
$ilkbes=$ilkbes-6*$i;
$sondort=$sondort+2*$i;
$dokuzhane=$ilkbes.$sondort;
$yenitc=guvenlik($dokuzhane);  // Son iki haneyi olusturuyoruz.
echo $yenitc."<br>";
}
}
if ($yon == 1)
{
for ($i = 1; $i <= $kactane ; $i++ ) 
{
$ilkbes=$ilkbes+6*$i;
$sondort=$sondort-2*$i;


$dokuzhane=$ilkbes.$sondort;
$yenitc=guvenlik($dokuzhane);
echo $yenitc."<br>";


}
}




}




akrabayap("35672345636",0,3);  //Test edelim.


?>


Kaynak
 

rainman4009

Asistan
Katılım
24 Şubat 2010
Mesajlar
250
Reaksiyon puanı
5
Puanları
18
bence bunun ispatı kesin mi... mesala benimki 22 ile başlıyor kardeşimin ki 21 babamın da 22 ...
sizin yaptığınız mantığa göre ilk 5 e -- rakam ekliyorsunuz ...

tam sonuç vermeyebilir bence
 
Üst