看到网上只有C#版本,拿过来改了个java版本
private static final String[] FOREIGNER_ID_CARD_CHECK_CODE = new String[] { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" }; public static Boolean isForeignerIdCard(String idCardStr) { if (idCardStr.length() != 18) { return false; } // 本体码 int[] a = new int[17]; // 加权因子 int[] weights = new int[17]; int[] product = new int[17]; char[] charArray = idCardStr.toCharArray(); for (int i = 18; i > 1; i--) { a[18 - i] = charArray[18 - i] - '0'; weights[18 - i] = (int)Math.pow(2, i - 1) % 11; product[18 - i] = a[18 - i] * weights[18 - i]; } // 乘积之和取模 int modulus = Arrays.stream(product).sum() % 11; int checkDigit = charArray[17] - '0'; // 校验码比对 return FOREIGNER_ID_CARD_CHECK_CODE[modulus].equals(String.valueOf(checkDigit)); }