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

     public static boolean isIDNum(String IDNumber) {
           if (IDNumber == null || "".equals(IDNumber)) {
               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]$)";
           //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(第十八位为校验值)
           //$结尾
           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();
                       return false;
                   }
               }
           }
           return matches;
       }
  • 相关阅读:
    Redis 优缺点
    如何保证接口的幂等性。。。。。
    自动化部署 jenkins 插件简介
    JWT与Session比较和作用
    代码注释鉴赏,喜欢就拿去用!
    python中计时模块timeit的使用方法
    【Java】JavaIO(二)、节点流
    【Java】JavaIO(一)、基础知识
    【Git】四、Git工作
    【Git】三、工作区、暂存区、版本库
  • 原文地址:https://www.cnblogs.com/ljfchtcc/p/13154593.html
Copyright © 2011-2022 走看看