外国人永久居留身份证校验18位Java版

发布时间 2023-11-22 11:45:54作者: 烟锁池塘柳12F

看到网上只有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));
}