Java ile TC kimlik numarası kontrolü ve doğrulanması

Nufüs Cüzdanı

Yaklaşık 6 yıl önce şu yazımda T.C. kimlik numarası üreten, doğruluğunu kontrol eden bir uygulama paylaşmışım ve bu numaraların belirli bir algoritması olduğundan bahsetmişim. Son zamanlarda Java ile T.C. kimlik numarası doğrulaması ihtiyacım oldu ve ben de bu konuyla ilgili yazdığım Java kodunu sizlerle paylaşmak istedim. Öncelikle T.C. kimlik numaraların algoritması ile ilgili detaylardan bahsedelim. Geçerli bir T.C. kimlik numarası aşağıdaki koşulları mutlaka sağlamalıdır.

  • 11 haneli olmalıdır.
  • Tamamen rakamlardan oluşmalıdır.
  • Sıfır (0) ile başlayamaz.
  • 1, 2, 3, 4, 5, 6, 7, 8, 9 ve 10. basamaktaki rakamların toplamından elde edilen sonuç 10’a bölündüğünde elde ettiğimiz kalan, 11. basamaktaki rakama eşit olmalıdır.
  • 1, 3, 5, 7, ve 9. basamaktaki sayıların toplamı 7 ile çarpılıp; 2, 4, 6 ve 8. basamaktaki sayıların toplamından çıkartıldığında, çıkan sonucun 10’a bölümünden kalanı 10. basamaktaki sayıya eşit olmalıdır.

Gelelim yukarıdaki kısıtlamalar doğrultusunda Java ile yazdığımız doğrulama metoduna…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/**
 * Validates a given TCK No
 * 
 * @param tckn
 *            TCK No
 * @return true if valid otherwise false
 */
private static boolean isValidTckn(Long tckn) {
	try {
		String tmp = tckn.toString();
 
		if (tmp.length() == 11) {
			int totalOdd = 0;
 
			int totalEven = 0;
 
			for (int i = 0; i < 9; i++) {
				int val = Integer.valueOf(tmp.substring(i, i + 1));
 
				if (i % 2 == 0) {
					totalOdd += val;
				} else {
					totalEven += val;
				}
			}
 
			int total = totalOdd + totalEven + Integer.valueOf(tmp.substring(9, 10));
 
			int lastDigit = total % 10;
 
			if (tmp.substring(10).equals(String.valueOf(lastDigit))) {
				int check = (totalOdd * 7 - totalEven) % 10;
 
				if (tmp.substring(9, 10).equals(String.valueOf(check))) {
					return true;
				}
			}
		}
	} catch (Exception e) {
		LOGGER.catching(e);
	}
 
	return false;
}

Yukarıdaki metot “Long” tipinde bir parametre bekliyor, dilerseniz aşağıdaki metot ile de “String” tipinde bir argumanın da kontrolünü yapabilirsiniz.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * Validates a given TCK No
 * 
 * @param tckn
 *            TCK No
 * @return true if valid otherwise false
 */
public static boolean isValidTckn(String tckn) {
	if (null!=tckn && tckn.matches("^([1-9]{1}[0-9]{10})$")) {
		return isValidTckn(Long.valueOf(tckn));
	}
 
	return false;
}

Kodlarla ilgili herhangi bir yanlışlık ya da eksiklik gördüğünüzde yorum olarak bana iletin durumu lütfen.

, , ,

2 Responses to Java ile TC kimlik numarası kontrolü ve doğrulanması

  1. Volkan BAYTOK 02 Nisan 2017 at 10:01 PM #

    /**
    *
    */
    package tckimlik;

    import java.awt.FlowLayout;
    import java.awt.GridLayout;

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    /**
    * @author vbaytok
    *
    */
    public class tckimlik
    {
    private JFrame mainFrame;
    private JLabel headerLabel;
    private JLabel statusLabel;
    private JPanel controlPanel;

    public tckimlik()
    {
    prepareGUI();
    }

    private void prepareGUI(){
    mainFrame = new JFrame(“Java Swing Examples”);
    mainFrame.setSize(400,200);
    mainFrame.setLayout(new GridLayout(3, 1));

    mainFrame.addWindowListener(new WindowAdapter() {
    public void windowClosing(WindowEvent windowEvent){
    System.exit(0);
    }
    });
    headerLabel = new JLabel(“”, JLabel.CENTER);
    statusLabel = new JLabel(“”,JLabel.CENTER);
    statusLabel.setSize(350,100);

    controlPanel = new JPanel();
    controlPanel.setLayout(new FlowLayout());

    mainFrame.add(headerLabel);
    mainFrame.add(controlPanel);
    mainFrame.add(statusLabel);
    mainFrame.setVisible(true);
    }
    public static void main(String[] args) {
    tckimlik tcKimlikKontrol = new tckimlik();
    tcKimlikKontrol.TCKimlikKontrolFrm();
    }

    private void TCKimlikKontrolFrm()
    {
    headerLabel.setText(“Kontrol Etmek istediğiniz TCKimlik Numaras”);

    JLabel lblTCKimlikNo= new JLabel(“TC Kimlik No: “, JLabel.RIGHT);
    final JTextField txtTCKimlikNo = new JTextField(7);

    JButton btnDogrula = new JButton(“Doğrula”);
    btnDogrula.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e)
    {
    Boolean v = isValidTckn(txtTCKimlikNo.getText());
    String s =””;
    if (v) s=”Gerçek”; else s=”Hatalı…!!!!”;
    //JOptionPane.showMessageDialog(null, s, “-JAGUBA-“, JOptionPane.INFORMATION_MESSAGE);
    statusLabel.setText(s);
    }
    });
    controlPanel.add(lblTCKimlikNo);
    controlPanel.add(txtTCKimlikNo);
    controlPanel.add(btnDogrula);
    mainFrame.setVisible(true);
    }

    /** * Validates a given TCK No * * @param tckn *
    * TCK No * @return true if valid otherwise false */
    private static boolean isValidTckn(Long tckn)
    {
    try
    {
    String tmp = tckn.toString();
    if (tmp.length() == 11)
    {
    int totalOdd = 0;
    int totalEven = 0;
    for (int i = 0; i < 9; i++)
    {
    int val = Integer.valueOf(tmp.substring(i, i + 1));
    if (i % 2 == 0)
    {
    totalOdd += val;
    }
    else
    {
    totalEven += val;
    }
    }
    int total = totalOdd + totalEven + Integer.valueOf(tmp.substring(9, 10));
    int lastDigit = total % 10;
    if (tmp.substring(10).equals(String.valueOf(lastDigit)))
    {
    int check = (totalOdd * 7 – totalEven) % 10;
    if (tmp.substring(9, 10).equals(String.valueOf(check)))
    { return true; }
    }
    }
    }
    catch (Exception e)
    {
    //LOGGER.catching(e);
    }
    return false;
    }

    /**
    * Validates a given TCK No
    *
    * @param tckn
    * TCK No
    * @return true if valid otherwise false
    */
    public static boolean isValidTckn(String tckn) {
    if (null!=tckn && tckn.matches("^([1-9]{1}[0-9]{10})$")) {
    return isValidTckn(Long.valueOf(tckn));
    }

    return false;
    }

    }

Bir Cevap Yazın

Font Resize