zoukankan      html  css  js  c++  java
  • 正则表达式校验15/18位生份证-JAVA版

        public static boolean isIDNumber(String iDNumber) {
            if (iDNumber == null || "".equals(iDNumber)) {
                return false;
            }
            //获取日期
            String d = iDNumber.substring(6, 14);
            boolean isDateStr = isDateStr(d);
            if (!isDateStr) {
                System.err.println("证件非法, 出生日期无效 :" + d);
                return false;
            }
            // 定义判别用户身份证号的正则表达式(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() == 18) {
                    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) {
                        e.printStackTrace();
                        System.out.println("异常:" + iDNumber);
                        return false;
                    }
                }
            }
            return matches;
        }
    
        /**
         * @创建人 cx
         * @创建时间 2018/10/11 11:42
         * @描述 验证字符串是否为合法日期  yyyyMMdd
         */
        public static boolean isDateStr(String date) {
            Pattern p = Pattern.compile("^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))?$");
            return p.matcher(date).matches();
        }
  • 相关阅读:
    JS与Android交互
    win10 死机 无响应
    clientdataset.open 报错 Name not unique in this context
    WIN10 常用bug解决办法
    关闭win10 自动更新 及蓝屏解决办法
    delphi 调用Webservice 引入wsdl 报错 document empty
    C# 类库调试 启动外部程序无法调试
    ADOQuery.Parameters: Property Parameters does not exist
    delphi android 自动升级
    不死僵尸木马lpt7.asp.asp与lpt5.cnzzz.asp的删除方法
  • 原文地址:https://www.cnblogs.com/cx987514451/p/9875603.html
Copyright © 2011-2022 走看看