package me.test.biz;
/**
*
* 验证身份证号码格式是否合法。
* 参考国标 GB 11643-1999 公民身份号码.pdf
*
* @author zll
*/
public class IdNum {
public static void main(String[] args) {
System.out.println(isValid18("11010519491231002X"));
System.out.println(isValid18("440524188001010014"));
}
private static final int[] WEIGHTS = new int[] {
7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1
};
private static final char[] VERIFY_CODES = new char[] {
'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'
};
public static boolean isValid18(String idNo) {
if (idNo == null || idNo.length() != 18) {
return false;
}
int sum = 0;
for (int i = 0; i < idNo.length() - 1; i++) {
char c = idNo.charAt(i);
// 非0~9
if (!(c >= 0x30 && c <= 0x39)) {
return false;
}
int num = c - 0x30;
sum += num * WEIGHTS[i];
}
int mod = sum % 11;
int verifyCode = VERIFY_CODES[mod];
return verifyCode == idNo.charAt(17);
}
}