22 Aralık 2010 Çarşamba

TC Kimlik No Algoritması

Oluşabilecek tüm kimlik numaralarını hesaplayan algoritmayı aşağıda bulabilirsiniz. Bu sayede tam hatırlayamadığınız bir kimlik numarasını bulabilirsiniz mesela. Ben bu yüzden kullanmıştım bu algoritmayı.


for (int a1 = 1; a1 < 10; a1++)
for (int a2 = 0; a2 < 10; a2++)
for (int a3 = 0; a3 < 10; a3++)
for (int a4 = 0; a4 < 10; a4++)
for (int a5 = 0; a5 < 10; a5++)
for (int a6 = 0; a6 < 10; a6++)
for (int a7 = 0; a7 < 10; a7++)
for (int a8 = 0; a8 < 10; a8++)
for (int a9 = 0; a9 < 10; a9++)
{
int tekBasamaklar = a1 + a3 + a5 + a7 + a9;
int ciftBasamaklar = a2 + a4 + a6 + a8;
int t1 = (tekBasamaklar * 3) + ciftBasamaklar;
int c1= (10 - (t1 % 10)) % 10;

int t2 = c1 + ciftBasamaklar;
int t3 = (t2 * 3) + tekBasamaklar;
int c2 = (10 - (t3 % 10)) % 10;

string tc = String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}", a1, a2, a3, a4, a5, a6, a7, a8, a9, c1, c2);
Console.WriteLine(tc);
}

ya da bu algoritmayla biraz daha oynayıp şu şekilde işler yapabilirsiniz:


/// Girilen 9 basamaklı sayının son iki basamağını bulup TC Kimlik No oluşturur
string tc = Console.ReadLine();
int[] digit = new int[9];
for (int i = 0; i < 9; i++)
digit[i] = Convert.ToInt32(tc.Substring(i, 1));

int tekBasamaklar = digit[0] + digit[2] + digit[4] + digit[6] + digit[8];
int ciftBasamaklar = digit[1] + digit[3] + digit[5] + digit[7];
int t1 = (tekBasamaklar * 3) + ciftBasamaklar;
int c1 = (10 - (t1 % 10)) % 10;

int t2 = c1 + ciftBasamaklar;
int t3 = (t2 * 3) + tekBasamaklar;
int c2 = (10 - (t3 % 10)) % 10;

string result = String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}", digit[0], digit[1], digit[2], digit[3], digit[4], digit[5], digit[6], digit[7], digit[8], c1, c2);
Console.WriteLine(result);

1 yorum: