goja-core/src/main/java/goja/core/kits/IdCardKit.java
public static boolean validateHKCard(String idCard) {
        String card = idCard.replaceAll("[\\(|\\)]", "");
        Integer sum;
        if (card.length() == 9) {
            sum = ((int) card.substring(0, 1).toUpperCase().toCharArray()[0] - 55) * 9
                    + ((int) card.substring(1, 2).toUpperCase().toCharArray()[0] - 55) * 8;
            card = card.substring(1, 9);
        } else {
            sum = 522 + ((int) card.substring(0, 1).toUpperCase().toCharArray()[0] - 55) * 8;
        }
        String mid = card.substring(1, 7);
        String end = card.substring(7, 8);
        char[] chars = mid.toCharArray();
        Integer iflag = 7;
        for (char c : chars) {
            sum = sum + Integer.valueOf(c + "") * iflag;
            iflag--;
        }
        if (end.toUpperCase().equals("A")) {
            sum = sum + 10;
        } else {
            sum = sum + Integer.valueOf(end);
        }
        return (sum % 11 == 0);
    }
public static boolean validateHKCard(String idCard) {
        String card = idCard.replaceAll("[\\(|\\)]", "");
        Integer sum;
        if (card.length() == 9) {
            sum = ((int) card.substring(0, 1).toUpperCase().toCharArray()[0] - 55) * 9
                    + ((int) card.substring(1, 2).toUpperCase().toCharArray()[0] - 55) * 8;
            card = card.substring(1, 9);
        } else {
            sum = 522 + ((int) card.substring(0, 1).toUpperCase().toCharArray()[0] - 55) * 8;
        }
        String mid = card.substring(1, 7);
        String end = card.substring(7, 8);
        char[] chars = mid.toCharArray();
        Integer iflag = 7;
        for (char c : chars) {
            sum = sum + Integer.valueOf(c + "") * iflag;
            iflag--;
        }
        if (end.toUpperCase().equals("A")) {
            sum = sum + 10;
        } else {
            sum = sum + Integer.valueOf(end);
        }
        return (sum % 11 == 0);
    }
public static boolean validateHKCard ( String idCard ) { String card = idCard . replaceAll ( "[\\(|\\)]" , "" ) ; Integer sum ; if ( card . length ( ) == 9 ) { sum = ( ( int ) card . substring ( 0 , 1 ) . toUpperCase ( ) . toCharArray ( ) [ 0 ] - 55 ) * 9 + ( ( int ) card . substring ( 1 , 2 ) . toUpperCase ( ) . toCharArray ( ) [ 0 ] - 55 ) * 8 ; card = card . substring ( 1 , 9 ) ; } else { sum = 522 + ( ( int ) card . substring ( 0 , 1 ) . toUpperCase ( ) . toCharArray ( ) [ 0 ] - 55 ) * 8 ; } String mid = card . substring ( 1 , 7 ) ; String end = card . substring ( 7 , 8 ) ; char [ ] chars = mid . toCharArray ( ) ; Integer iflag = 7 ; for ( char c : chars ) { sum = sum + Integer . valueOf ( c + "" ) * iflag ; iflag -- ; } if ( end . toUpperCase ( ) . equals ( "A" ) ) { sum = sum + 10 ; } else { sum = sum + Integer . valueOf ( end ) ; } return ( sum % 11 == 0 ) ; }
验证香港身份证号码(存在Bug，部份特殊身份证无法检查) <p> 身份证前2位为英文字符，如果只出现一个英文字符则表示第一位是空格，对应数字58 前2位英文字符A-Z分别对应数字10-35
最后一位校验码为0-9的数字加上字符"A"，"A"代表10 </p> <p> 将身份证号码全部转换为数字，分别对应乘9-1相加的总和，整除11则证件号码有效 </p>

@param idCard 身份证号码
@return 验证码是否符合
验证香港身份证号码 ( 存在Bug，部份特殊身份证无法检查 ) <p > 身份证前2位为英文字符，如果只出现一个英文字符则表示第一位是空格，对应数字58 前2位英文字符A - Z分别对应数字10 - 35 最后一位校验码为0 - 9的数字加上字符 A ， A 代表10 < / p > <p > 将身份证号码全部转换为数字，分别对应乘9 - 1相加的总和，整除11则证件号码有效 < / p >