外国人永久居留身份证校验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)));
}

 

posted @ 2023-11-22 11:40  烟锁池塘柳12F  阅读(1788)  评论(0)    收藏  举报