美文网首页
Java 根据18位身份证号 判断 最后一位校验码 逻辑判断身份

Java 根据18位身份证号 判断 最后一位校验码 逻辑判断身份

作者: MrLimLee | 来源:发表于2020-04-02 17:14 被阅读0次

    判断逻辑说明

    410 782 19950806 309 7
    省编码 市编码 出生年月日 随机码(最后一位是性别) 校验码
        /**
         * 18位身份证号 最后一位校验码 判断方法
         * 逻辑:
         * 1:身份证号前17位数分别乘不同的系数
         * 从第1位到17位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
         * 2:将乘积之和除以11,余数可能为:0 1 2 3 4 5 6 7 8 9 10
         * 3:根据余数,分别对应最后一位身份证号:1 0 X 9 8 7 6 5 4 3 2
         * 余数与校验码对应关系:0:1,1:0,2:X,3:9,4:8,5:7,6:6,7:5,8:4,9:3:10:2
         *
         * @param idCard 身份证号
         */
        public static boolean checkIDCard(String idCard) {
            if (idCard == null || idCard.equals("") || idCard.length() != 18) {
                return false;
            }
    
            char[] chars = idCard.toCharArray();
            int charsLength = chars.length - 1;
            int count = 0;
            for (int i = 0; i < charsLength; i++) {
                int charI = Integer.parseInt(String.valueOf(chars[i]));
                count += charI * (Math.pow(2, 17 - i) % 11);
            }
            String idCard18 = String.valueOf(chars[17]).toUpperCase();
    
            String idCardLast;
            switch (count % 11) {
                case 0:
                    idCardLast = "1";
                    break;
    
                case 1:
                    idCardLast = "0";
                    break;
    
                case 2:
                    idCardLast = "X";
                    break;
    
                default:
                    idCardLast = 12 - (count % 11) + "";
                    break;
            }
            return idCard18.equals(idCardLast);
        }
    

    相关文章

      网友评论

          本文标题:Java 根据18位身份证号 判断 最后一位校验码 逻辑判断身份

          本文链接:https://www.haomeiwen.com/subject/yezxphtx.html