İçeriğe geç

Tc Kimlik Numarası Algortiması

T.C. Kimlik No, onbir haneden oluşan, Nüfus ve Vatandaşlık İşleri Genel Müdürlüğü tarafından Türkiye Cumhuriyeti vatandaşlarına verilmiş 11 rakamdan oluşan kişiye özgü bir sayıdır.

Üzerinde basit bir pariteyle hata bulma özelliği bulunmaktadır; ilk 10 rakamın toplamının birler basamağı, 11. rakamı vermekte.

Ayrıca; 1, 3, 5, 7 ve 9. rakamın toplamının 7 katı ile 2, 4, 6 ve 8. rakamın toplamının 9 katının toplamının birler basamağı 10. rakamı; 1, 3, 5, 7 ve 9. rakamın toplamının 8 katının birler basamağı 11. rakamı vermektedir.

[tr.wikipedia.org]

Algoritmamız yukarıda açık bir şekilde anlatılmış. Aşağıda kodları vereceğim kodu anlamak istiyorsanız bir kağıt kalem alın ve adım adım işleyin yok ben anlamam sadece projeme eklerim derseniz de eyvallah 🙂

Bir tc yollayalım metodumuza:

 public int controlTc(long tc) {


            return controlTc(partial(tc));
        }

Tc numaramızı parçalayalım yani: 11111111111 ise -> 1-1-1-1-1-1-1-1-1-1-1 gibi.

 public long[] partial(long tc)
        {
            long[] array = new long[12];
            try
            {
               
                int counter = 2;
                long one = tc % 10;
                long last = 0;
                long counterPart = 10;
                array[1] = one;
                for (long i = 100; i <= 100000000000; i = i * 10)
                {

                    array[counter] = tc % i;
                    last = array[counter] - one;
                    last = last / counterPart;
                    array[counter] = last;
                    one = tc % i;
                    counterPart = counterPart * 10;

                    counter++;
                }
                return array;
            }
            catch { return array; }
           

            

        }

En son işlem ise işlemleri yapıp kontrol etmek:

 public int controlTc(long[] array)
        {

          


            long singleSum = (array[11] + array[9] + array[7] + array[5]+array[3]);
            long coupleSum = (array[10] + array[8] + array[6] + array[4]);
            long firstTenSum = (array[11]+array[10]+array[9]+array[8]+array[7]+array[6]+array[5]+array[4]+array[3]+array[2]);

            long sumTen = (singleSum * 7)+ (coupleSum * 9);
            long sumEleven = (singleSum * 8);
            long sumFirstSum = firstTenSum % 10;

            long sumOneTen = sumTen % 10;
            long sumOneEleven = sumEleven % 10;

            if (sumOneTen == array[2] && sumOneEleven == array[1] && sumFirstSum==array[1])
            {

                return 1;

            }

            else
            {

                return 0;
            }
          
        }

Kendi projemde de kullandığım bir algoritma oldu. Eminim bundan iyisi vardır. Adım adım gidiyoruz. Allah’a emanet 🙂

Tarih:Algoritma(Java)Programlama&Algoritma

4 Yorum

  1. GMSKY GMSKY

    Adam Unit Test bile yapmış Oh Yeah!

    • Hehe Mehmet kardeşim Unit Teste siz daha profesyonelsiniz ama teşekkür ederim 🙂

  2. Hep merak etmiştim şu yazılımcılar nasıl oluyor da TC üretebiliyorlar, TC çok karışık çünkü diye 🙂 Teşekkürler 👏

    • Yasemin hanım çok sağolun, aslında matematikçilere teşekkür etmek lazım çünkü onlar formülize ediyorlar biz kodluyoruz 🙂

Bir Cevap Yazın

This site uses Akismet to reduce spam. Learn how your comment data is processed.