检查身份证号是否符合规则

Posted 默慊$

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查身份证号是否符合规则相关的知识,希望对你有一定的参考价值。

日常开发中,我们会遇到各种各样的数据校验规则,最简单的从非空到复杂一些的编码输入规则,今天就分享一个身份证编码的校验,这个其实也是很常见的,写出来一个是加深印象,其次也可以分享给大家使用,后续想找的话也可以很快找到,上代码:

/**
     * 检查身份证号是否符合规则
     * @param idNumber 本次检查行数据
     * @return
     */
    public boolean isIdNumber(String idNumber) 
        if (StringUtils.isBlank(idNumber)) 
            return false;
        
        // 定义判别用户身份证号的正则表达式(15位或者18位,最后一位可以为字母)
        String regularExpression =
                "(^[1-9]\\\\d5(18|19|20)\\\\d2((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\\\d3[0-9Xx]$)|"
                        + "(^[1-9]\\\\d5\\\\d2((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\\\d3$)";
        boolean matches = idNumber.matches(regularExpression);
        // 判断第18位校验值
        if (matches) 
            if (idNumber.length() == ID_NUMBER_LENGTH) 
                try 
                    char[] charArray = idNumber.toCharArray();
                    // 前十七位加权因子
                    int[] idCardWi = 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2;
                    // 这是除以11后,可能产生的11位余数对应的验证码
                    String[] idCardY = "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2";
                    int sum = 0;
                    for (int i = 0; i < idCardWi.length; i++) 
                        int current = Integer.parseInt(String.valueOf(charArray[i]));
                        int count = current * idCardWi[i];
                        sum += count;
                    
                    char idCardLast = charArray[17];
                    int idCardMod = sum % 11;
                    if (idCardY[idCardMod].toUpperCase()
                            .equals(String.valueOf(idCardLast).toUpperCase())) 
                        return true;
                     else 
                        log.info("身份证最后一位:" + String.valueOf(idCardLast).toUpperCase()
                                + "错误,正确的应该是:" + idCardY[idCardMod].toUpperCase());
                        return false;
                    

                 catch (Exception e) 
                    e.printStackTrace();
                    return false;
                
            
        
        return matches;
    

其中的正则表达式没啥说的,有基础的可以看懂,没基础的复制完了自己试试好使就行,主要是对18位身份证号最后一位的校验,可能需要看看代码逻辑理解一下,前17位数分别乘以对应的加权因子,然后除以11的余数是验证码数组的索引,如果对应的验证码跟第18位不相同,说明输入错误,有需要的兄弟拿去试试吧

以上是关于检查身份证号是否符合规则的主要内容,如果未能解决你的问题,请参考以下文章

验证身份证号规则(验证身份证号是否正确)

Oracle PL/SQL检查身份证号是否合法

Oracle PL/SQL检查身份证号是否合法

Oracle PL/SQL检查身份证号是否合法

怎么检测身份证号码是不是正确

Java练习 份证号码组成规则是前4位是代表省份和地区 编写一个程序,通过身份证号码判断某人是否是武汉人以及其性别。