C# ile Türkiye Cumhuriyeti T.C. Kimlik Numarası Doğrulama

25.12.2019 04:27:19 (2203 Kez okundu)

T.C. Kimlik numaralarını sahip olduğu algoritma ile doğrulayabiliriz.

Merhaba,

T.C. Kimlik numaralarının kökünde doğruluğunu sağlamak amacıyla bir algoritma mevcut.

Kimlik numaralarımız 11 haneden oluşmaktadır.

11 hanenin son iki basamağı ilk dokuz rakam ve sonrasında ilk 10 rakamın algoritma ile hesaplaması sonucu elde edilir.

Bu yazımız da son iki rakamı ilk 9 rakam ile doğrulayacağız.


Algoritymaya göre;

  1. 11 Hanelidir.
  2. Son rakam daima çift sayıdır. (Tek sayı olma olasılığı matematiksel olarak mümkün değil)
  3. İlk hane "0" sıfır olamaz.
  4. 1,3,5,7,9 hanelerinin toplamının 7 katından, 2,4,6,8 hanelerinin toplamı çıkartılır. Çıkan sonucun mod10'u (10 a bölümünden kalan) 10. haneyi verir.
  5. 1,2,3,4,5,6,7,8,9,10 hanelerinin toplamının mod10'u bize 11. haneyi verir.

Ben C# ile hazırladım, javascript ve benzeri kodlamalarda da kullanabilirsiniz.

Kodlarımız;

public static bool TCKNDogrulama(string TCKN)
{
	if (TCKN.Length != 11 || TCKN.Substring(0, 1) == "0" || Convert.ToInt32(TCKN.Substring(9, 2)) % 2 != 0)
		return false;

	// Tanımlamalarımızı yapıyoruz
	int TekHaneToplam = 0; // 10. hane algoritması için 1,3,5,7,9 haneleri toplamı
	int CiftHaneToplam = 0; // 10. hane algoritması için 2,4,6,8 haneleri toplamı
	int OnHaneninToplami = 0; // İkinci hane için gerekli ilk 10 hane toplamı

	// T.C. Kimlik Numarasını karakterlerini array dizine atıyoruz.
	char[] TCKArray = TCKN.ToCharArray();
	for (int i = 0; i < TCKArray.Length; i++)
	{
		// Önce toString yapıyoruz, sonra int e çeviriyoruz.
		int Karakter = Convert.ToInt32(TCKArray[i].ToString());

		// Bu koşula bağlı kalarak TekHAneToplam larını elde ediyoruz.
		// 1'nin mod2 si 0 a eşitse ve kimlik numarasının 10 hanesinden öncekileri baz alıyoruz.
		if (i % 2 == 0 & i < 9)
			TekHaneToplam += Karakter;
		// Yukarıdaki if den kalanları alıyoruz. 10 hanesindenöncekileri tabi.
		else if (i < 9)
			CiftHaneToplam += Karakter;

		// burada da son karakter hariç tümünü topluyoruz.
		if (i < 10)
			OnHaneninToplami += Karakter;
	}

	// Algoritmaya göre;

	// - TekHaneToplam 'ı 7'ye çarpıyor
	// - CiftHaneToplam dan çıkartıyor
	// - mod10 alıyoruz
	// 10. haneyi elde ediyoruz
	string HANE_ON = (((TekHaneToplam * 7) - CiftHaneToplam) % 10).ToString();

	// - OnHaneninToplami mod10 alıyoruz
	// - Bize 11. haneyi veriyor
	string HANE_ONBIR = (OnHaneninToplami % 10).ToString();

	// Burada da TCKN'nun son iki hanesini alıyoruz
	// Elde ettiğimiz değerlere eşit mi bakıyoruz
	// Eşitse true döndürüyoruz
	if (TCKN.Substring(9, 2) == HANE_ON + HANE_ONBIR)
		return true;

	// Yukarıdaki if'i aşar koşul doğrulanmazsa false döndürüyoruz.
	return false;
}

Başka bir yazıda görüşmek dileğiyle. wink

Öğrenmek istediğiniz, merak ettiğiniz bir şeyler varsa yorum alanından benimle paylaşabilirsiniz.

Yorumlar

Ortalama

Henüz değerlendirilmemiş.
Henüz yorum yapılmamış.
İlk yorumu siz yapın.

Bir Yorum Yaz