Java实现身份证最后一位校验

身份证校验码计算公式是:
第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。
第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。
第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。



/**
 * @author
 * @date 2023/6/21 10:59
 * 摘要:
 */
public class PersonID {
    private  static  int[] a = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    private  final static int X = 10;
    public static void main(String[] args) {

        String id = "43012319670908625X";

        System.out.println(fun(id));

//        System.out.println(id.length());
    }

    private static boolean fun(String id){

        int sum = 0;
        for (int i = 0; i < id.length()-1; i++) {
            int j = id.charAt(i) - '0';

            sum += j * a[i];
        }

        int remainder = sum % 11;


        int[] analyze = {1,0,X,9,8,7,6,5,4,3,2};

        char c = id.charAt(id.length()-1);

        if(analyze[remainder]== X){
            System.out.println("应为:X");
            return c=='x'||c=='X';
        }else{
            System.out.println("应为:"+ analyze[remainder] );
            return analyze[remainder] == (c-'0');
        }
    }
}


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