public static void main(String[] args) {
String pattern = "^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$";
String s = "身份证号";
String idCardNumber = s.toLowerCase();
Pattern p = Pattern.compile(pattern);
Matcher m = p.matcher(idCardNumber);
if (m.matches()){
int[] idCar=new int[idCardNumber.length()];
char[] chars = idCardNumber.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (i==17){
idCar[i]=String.valueOf(chars[i]).equals("x")?10:Integer.parseInt(String.valueOf(chars[i]));
}
else{
idCar[i]=Integer.parseInt(String.valueOf(chars[i]));
}
}
int count=0;
int[] test={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
for (int i = 0; i < test.length; i++) {
count+=test[i]*idCar[i];
}
int[] result={1,0,10,9,8,7,6,5,4,3,2};
int i = count % 11;
if (result[i]==idCar[17]){
System.out.println("正确");}
else {
System.out.println("错误");
}
}else {
System.out.println("错误");
}
}
只做了18位的,网上搜的都却一部分校验,我是又完善了一部分,是对于最后以为是否合法做了计算校验,直接复制就能用。如果有错误请指正