Herkese Merhaba,
Bu yazımda çoğu projede lazım olan bir algoritmayı paylaşmak istedim. Bu algoritma; herkesin sahip olduğu kişisel ve benzersiz olan 11 haneli T.C. Kimlik numarasını doğrulama algoritmasıdır. MERNİS üzerinden gerçek bir T.C. Sorgulama servisine sahip değilseniz, bu algoritma sizin için kurtarıcı olacaktır. Sahip olduğumuz T.C. Kimlik Numarası belirli kuralları göre oluşturulmuştur. Bizde bu kuralları doğrulayarak doğru bir T.C. no olup olmadığını kontrol edeceğiz. Bu kuralları ve ilgili fonksiyonu aşağıda paylaşıyor olacağım. Bu yazımda dil olarak java kullandım ama aynı özellikleri ve yapıyı diğer diller ile rahatlıkla yapabilirsiniz. Burada önemli olan yapıyı ve kuralları anlamak, gerisi sizde 🙂
Örnek Android uygulamasını buradan indirebilirsiniz. Ben Uygulamanın sadece can alıcı noktası olan ve her yerde kullanabileceğiniz fonksiyonu anlatacağım. Örnek kodda önemli alanları açıklama satırı ekleyerek anlatmaya çalıştım. İşinizi görmesi dileğiyle.
Kurallar:
- TC Kimlik Numarası 11 haneli olmalı
- TC Kimlik Numarası 0 ile başlamaz.
- TC Kimlik Numarasının son rakamı tek sayı olamaz
- TC kimlik numarasının 1,3,5,7,9 (tek haneler) hanelerinin toplamından 7 katından 2,4,6,8 (çift haneler) haneleri toplamının çıkarırsak mod 10 a göre 10. rakamı vermesi gerekir.
- TC kimlik numarasının ilk 10 hanesinin toplamnının mod 10 a göre 11. rakamı vermesi gerekir.
Şimdi bu öyle bir fonsiyon yazalım ki, T.C. Kimlik numarasını parametre olarak alsın ve sonucu bize doğru ya da yanlıştır şeklinde geri döndürsün. Haydi başlayalım:
public static boolean TcKimlikKontrol(String kimlikNo) { // değişkenler int tekHaneler = 0; int ciftHaneler = 0; int kural; int toplam = 0; // 1. kural 11 hane kontrolü if (kimlikNo.length() < 11) { return false; } // 2. kural 0 ile başlayamaz if (kimlikNo.startsWith("0")) { return false; } // diğer kurallar için rakamlar tek tek parse edilip diziye atılır char arrChar[] = kimlikNo.toCharArray(); int[] arr = new int[arrChar.length]; for (int i = 0; i < arrChar.length; i++) { arr[i] = Integer.parseInt(arrChar[i] + ""); } // 3. kural son rakam tek olamaz. çift sayı kontrolü için mod 2 uygulanır ve kalan o dan farklı ise geçersiz sayılır. if (arr[10] % 2 != 0) { return false; } // 4. kural ilk dokuz rakamdan tek haneler ile çift haneler toplamı for (int i = 0; i < 9; i++) { toplam += arr[i]; if ((i % 2) == 0) { // TC kimlik numarasının 1,3,5,7,9 toplamı tekHaneler += arr[i]; } else { // TC kimlik numarasının 2,4,6,8 toplamı ciftHaneler += arr[i]; } } // ilk on hanenin toplamı 5.kuralda kullanacağız. toplam += arr[9]; kural = ((tekHaneler * 7) - ciftHaneler); // 4. kurala göre kural değişkeninde kalan değerin mod 10'nu alındığında kalan T.C. Kimlik Numarasının onuncu hanesi vermeli. farklı ise şartı sağlamadığını gösterir if (kural % 10 != arr[9]) { return false; } // 5. kural T.C. Kimlik numarasının ilk on hanesinin toplamının mod 10'nundan kalan T.C. Kimlik numarasının 11. hanesine eşittir. Değilse şart sağlanmamış demektir. if ((toplam % 10) != arr[10]) { return false; } // yukarıda olumsuz bir durum yoksa demekki gelen T.C. Kimlik Numarası doğrudur. return true; }
Uygulamanın ekran görüntüsü :