zoukankan      html  css  js  c++  java
  • 身份证校验类

     /**
         * 校验身份证格式
         * @param IDNumber 身份证编码
         * @return
         */
        public static boolean isIDNumber(String IDNumber) {
            if (IDNumber == null || "".equals(IDNumber)) {
                return false;
            }
            int IdLength = 18;
            // 定义判别用户身份证号的正则表达式(15位或者18位,最后一位可以为字母)
            String regularExpression = "(^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$)|" +
                    "(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)";
            //假设18位身份证号码:41000119910101123X  410001 19910101 123X
            //^开头
            //[1-9] 第一位1-9中的一个      4
            //\d{5} 五位数字           10001(前六位省市县地区)
            //(18|19|20)                19(现阶段可能取值范围18xx-20xx年)
            //\d{2}                    91(年份)
            //((0[1-9])|(10|11|12))     01(月份)
            //(([0-2][1-9])|10|20|30|31)01(日期)
            //\d{3} 三位数字            123(第十七位奇数代表男,偶数代表女)
            //[0-9Xx] 0123456789Xx其中的一个 X(第十八位为校验值)
            //$结尾
    
            //假设15位身份证号码:410001910101123  410001 910101 123
            //^开头
            //[1-9] 第一位1-9中的一个      4
            //\d{5} 五位数字           10001(前六位省市县地区)
            //\d{2}                    91(年份)
            //((0[1-9])|(10|11|12))     01(月份)
            //(([0-2][1-9])|10|20|30|31)01(日期)
            //\d{3} 三位数字            123(第十五位奇数代表男,偶数代表女),15位身份证不含X
            //$结尾
            boolean matches = IDNumber.matches(regularExpression);
            //判断第18位校验值
            if (matches) {
                if (IDNumber.length() == IdLength) {
                    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 {
                            //身份证最后一位错误
                            return false;
                        }
    
                    } catch (Exception e) {
                        throw new RuntimeException("身份证格式校验出错:", e);
                    }
                }
            }
            return matches;
        }
    
        /**
         * 根据正则表达式验证
         * @param PassPortNumber 需要验证的内容
         * @param regularExpression 验证的正则
         * @return
         */
        public static boolean isTrueNumber(String PassPortNumber,String regularExpression){
            if (PassPortNumber == null || "".equals(PassPortNumber)) {
                return false;
            }
    
            return PassPortNumber.matches(regularExpression);
        }
    
  • 相关阅读:
    0108 创建表约束
    Mybatis 将数据库中查出的记录,一对多返回,即分组,然后返回每个组的所有数据
    SQL主表、从表
    MySQL中添加、删除字段,使用SQL语句操作
    git 将远程工作分支合并到本地dev分支
    MySQL inner join 和 left join 的区别
    Mysql union 和 order by 同时使用需要注意的问题
    The used SELECT statements have a different number of columns
    Every derived table must have its own alias(MySQL报错:每个派生表都必须有自己的别名)
    MySQL 日期格式化及字符串、date、毫秒互相转化
  • 原文地址:https://www.cnblogs.com/pan-my/p/10919192.html
Copyright © 2011-2022 走看看