外国人永久居留身份证校验18位Java版
private static final int[] WEIGHTS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
private static final char[] VERIFY_CODES = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
public static boolean isValidNRIC(String nric) {
if (StringUtils.isNotEmpty(nric) && nric.length() == 15) {
return true;
}
if (nric == null || (nric.length() != 18 && !nric.endsWith("X")) || !nric.matches("^\\d{17}[\\dX]$")) {
return false;
}
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += (nric.charAt(i) - '0') * WEIGHTS[i];
}
char verifyCode = VERIFY_CODES[(sum % 11)];
return verifyCode == nric.charAt(17) || (verifyCode == 'X' && "X".equals(nric.substring(17)));
}
private static final char[] VERIFY_CODES = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
public static boolean isValidNRIC(String nric) {
if (StringUtils.isNotEmpty(nric) && nric.length() == 15) {
return true;
}
if (nric == null || (nric.length() != 18 && !nric.endsWith("X")) || !nric.matches("^\\d{17}[\\dX]$")) {
return false;
}
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += (nric.charAt(i) - '0') * WEIGHTS[i];
}
char verifyCode = VERIFY_CODES[(sum % 11)];
return verifyCode == nric.charAt(17) || (verifyCode == 'X' && "X".equals(nric.substring(17)));
}

浙公网安备 33010602011771号