使用Java实现身份证真假校验

一、身份证号码校验规则

(1)身份证18位数

(2)前17位为是数字,最后一位为验证位,计算最后一位规则如下:

  • 证号码前17位数 从第一位开始到第十七位每位数分别于加权因子相乘求和
    加权因子:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

  • 再将和对11求余,得到余数

  • 余数于最后一位检验位对应关系如下
    #########余数:0-1-2-3-4-5-6-7-8-9-10。
    身份证最后一位:1-0-X-9-8-7-6-5-4-3- 2 。
    例如,求得余数为3,则身份证最后一位为9

二、代码实现

1.代码如下(示例)

public static void main(String[] args) {
        for (;;){
            //键盘录入身份证号
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入验证的身份证号码:");
            String card = sc.nextLine();
            //调用自定义方法isCard校验真假
            if (isCard(card)) {
                System.out.println("身份证号码正确");
                break;
            }System.out.println("身份证号码不正确");
        }
    }

2.自定义方法isCard

代码如下(示例):

 /**
     * 验证身份证真假
     * @param  carNumber 身份证号
     * @return boolean*/
    public static boolean isCard(String carNumber) {
        //判断输入身份证号长度是否合法
        if (carNumber.length() != 18) {
            throw new RuntimeException("身份证长度不合法");//不合法 抛出一个异常
        }
        //校验身份证真假
        int sum = 0;
        int[] weight = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//将加权因子定义为数组
        //遍历weight数组 求身份证前17项系数和
        for (int i = 0; i < weight.length; i++) {
            int n = carNumber.charAt(i) - 48;//获取 身份证对应数
            int w = weight[i];
            sum += w * n;
        }
        //对11求余
        int index = sum % 11;
        //校验码
        String m = "10X98765432";
        //获取身份证最后一位进行比对
        return m.charAt(index) == carNumber.charAt(17);
    }

总结

思路:根据身份证算法规则计算出最后一位验证位数,再与所需要验证身份证号码最后一位进行对比,返回结果
注意:(1)数组的索引 (2)ASCII中字符与数字相差 48
欢迎留言反馈

你可能感兴趣的:(java,开发语言)