# Java 校验身份证号码

📆 2021-12-30 16:00

# Java 版

public static boolean testIdCard(String idCard){
    if(idCard==null||idCard.length()!=18) return false;

    String idCardTest=idCard.toUpperCase();

    Pattern p=Pattern.compile("[0-9X]{18}");
    Matcher m=p.matcher(idCardTest);
    if(!m.matches()) return false;

    final int[] w=new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
    final char[] c=new char[]{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
    int sum=0;
    for (int i = 0; i < idCardTest.length()-1; i++) {
        sum+=Character.getNumericValue(idCardTest.charAt(i))*w[i];
    }
    return c[sum%11]==idCardTest.charAt(17);
}

# JavaScript 版

var idcard='410185********3535';
var w=[7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var c=['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
var sum=0;
for(var i=0;i<idcard.length-1;i++){
    sum+=parseInt(idcard.charAt(i))*w[i];
}
console.log(c[sum%11]==idcard[idcard.length-1]);

JavaScript 版比较简陋,可参考 Java 版进行增强

最后更新于: 8/16/2022, 2:48:47 PM