博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
身份证的最准确的正则表达式,绝对让你吃惊啊!
阅读量:4319 次
发布时间:2019-06-06

本文共 5459 字,大约阅读时间需要 18 分钟。

啥也不说了,直接上代码,直接调用即可

1 public class IDCardUtils {  2      /**  3      * 身份证号码正则表达式  4      */  5      public static boolean isIDCard(String idNum)  throws ParseException {  6         //定义判别用户身份证号的正则表达式(要么是15位,要么是18位,最后一位可以为字母)  7 //        Pattern idNumPattern = Pattern.compile("(\\d{14}[0-9a-zA-Z])|(\\d{17}[0-9a-zA-Z])");  8 //        //通过Pattern获得Matcher  9 //        Matcher idNumMatcher = idNumPattern.matcher(idNum); 10 //         return idNumMatcher.matches(); 11          String[] ValCodeArr = { "1", "0", "x", "9", "8", "7", "6", "5", "4", 12                  "3", "2" }; 13          String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", 14                  "9", "10", "5", "8", "4", "2" }; 15          String Ai = ""; 16          // ================ 号码的长度 15位或18位 ================ 17          if (idNum.length() != 15 && idNum.length() != 18) { 18              return false; 19          } 20          // =======================(end)======================== 21  22          // ================ 数字 除最后以为都为数字 ================ 23          if (idNum.length() == 18) { 24              Ai = idNum.substring(0, 17); 25          } else if (idNum.length() == 15) { 26              Ai = idNum.substring(0, 6) + "19" + idNum.substring(6, 15); 27          } 28          if (isNumeric(Ai) == false) { 29              return false; 30          } 31          // =======================(end)======================== 32  33          // ================ 出生年月是否有效 ================ 34          String strYear = Ai.substring(6, 10);// 年份 35          String strMonth = Ai.substring(10, 12);// 月份 36          String strDay = Ai.substring(12, 14);// 月份 37          if (isDataFormat(strYear + "-" + strMonth + "-" + strDay) == false) { 38              return false; 39          } 40          GregorianCalendar gc = new GregorianCalendar(); 41          SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); 42          if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150 43                  || (gc.getTime().getTime() - s.parse( 44                  strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) { 45              return false; 46          } 47          if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) { 48              return false; 49          } 50          if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) { 51              return false; 52          } 53          // =====================(end)===================== 54  55          // ================ 地区码时候有效 ================ 56          Hashtable h = GetAreaCode(); 57          if (h.get(Ai.substring(0, 2)) == null) { 58              return false; 59          } 60          // ============================================== 61  62          // ================ 判断最后一位的值 ================ 63          int TotalmulAiWi = 0; 64          for (int i = 0; i < 17; i++) { 65              TotalmulAiWi = TotalmulAiWi 66                      + Integer.parseInt(String.valueOf(Ai.charAt(i))) 67                      * Integer.parseInt(Wi[i]); 68          } 69          int modValue = TotalmulAiWi % 11; 70          String strVerifyCode = ValCodeArr[modValue]; 71          Ai = Ai + strVerifyCode; 72  73          if (idNum.length() == 18) { 74              if (Ai.equalsIgnoreCase(idNum) == false) { 75                  return false; 76              } 77          } else { 78              return true; 79          } 80          return true; 81  82      } 83  84     /** 85      * 功能:判断字符串是否为数字 86      * @param str 87      * @return 88      */ 89     private static boolean isNumeric(String str) { 90         Pattern pattern = Pattern.compile("[0-9]*"); 91         Matcher isNum = pattern.matcher(str); 92         if (isNum.matches()) { 93             return true; 94         } else { 95             return false; 96         } 97     } 98  99     /**100      * 功能:设置地区编码101      * @return Hashtable 对象102      */103     private static Hashtable GetAreaCode() {104         Hashtable hashtable = new Hashtable();105         hashtable.put("11", "北京");106         hashtable.put("12", "天津");107         hashtable.put("13", "河北");108         hashtable.put("14", "山西");109         hashtable.put("15", "内蒙古");110         hashtable.put("21", "辽宁");111         hashtable.put("22", "吉林");112         hashtable.put("23", "黑龙江");113         hashtable.put("31", "上海");114         hashtable.put("32", "江苏");115         hashtable.put("33", "浙江");116         hashtable.put("34", "安徽");117         hashtable.put("35", "福建");118         hashtable.put("36", "江西");119         hashtable.put("37", "山东");120         hashtable.put("41", "河南");121         hashtable.put("42", "湖北");122         hashtable.put("43", "湖南");123         hashtable.put("44", "广东");124         hashtable.put("45", "广西");125         hashtable.put("46", "海南");126         hashtable.put("50", "重庆");127         hashtable.put("51", "四川");128         hashtable.put("52", "贵州");129         hashtable.put("53", "云南");130         hashtable.put("54", "西藏");131         hashtable.put("61", "陕西");132         hashtable.put("62", "甘肃");133         hashtable.put("63", "青海");134         hashtable.put("64", "宁夏");135         hashtable.put("65", "新疆");136         hashtable.put("71", "台湾");137         hashtable.put("81", "香港");138         hashtable.put("82", "澳门");139         hashtable.put("91", "国外");140         return hashtable;141     }142 }

希望可以帮到大家!

转载于:https://www.cnblogs.com/wangying222/p/6065877.html

你可能感兴趣的文章
前端禁止鼠标右键、禁止全选、复制、粘贴
查看>>
六. k8s--ingress学习笔记
查看>>
二. python数组和列表
查看>>
七. k8s--volumes之pv pvc学习笔记
查看>>
八. k8s--configmap学习笔记
查看>>
十. k8s--访问控制 serviceaccount和RBAC 学习笔记
查看>>
九. k8s--statefulset控制器
查看>>
十一. k8s--dashboard部署
查看>>
shell解析xml文件
查看>>
十二. k8s--网络策略flannel与canal学习笔记
查看>>
十三. k8s--调度器
查看>>
十四. k8s资源需求和限制, 以及pod驱逐策略
查看>>
三. k8s基本操作以及pod存活以及可用性验证钩子
查看>>
五. k8s--service学习笔记
查看>>
二. k8s安装过程
查看>>
jenkins pipeline 使用遇到的问题
查看>>
四. k8s--pod控制器
查看>>
一. python数据结构与算法
查看>>
django模型内部类meta解释
查看>>
v-for(:key)绑定index、id、key的区别
查看>>