zoukankan      html  css  js  c++  java
  • 校验居民身份证的证照号码

    //注:代码非原创,只为记录

    java代码:

     1 public static Boolean checkPersonCode(String personCode) {
     2         
     3         if (PubUtil.isEmpty(personCode)) 
     4             return false;
     5         
     6         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]$)|" +
     7                 "(^[1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}$)";
     8         
     9         boolean matches = personCode.matches(regularExpression);
    10         
    11         if(matches) {
    12             if(personCode.length()==18) {
    13                 //前十七位加权因子
    14                 int[] prefix = new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};  
    15                 //这是除以11后,可能产生的11位余数对应的验证码
    16                 char[] suffix = new char[]{ '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };  
    17                 int idCardWiSum=0;  //用来保存前17位各自乖以加权因子后的总和  
    18                 for(int i=0;i<17;i++){  
    19                     idCardWiSum+=(personCode.charAt(i) - '0') *prefix[i];  
    20                 }  
    21       
    22                 int idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置  
    23                 char idCardLast=personCode.charAt(17);//得到最后一位身份证号码  
    24       
    25                 return idCardLast == suffix[idCardMod];  
    26             }
    27         }
    28         return matches;
    29     }

    js代码:

     1 function checkPersonCode(personCode){
     2     if(PUBUtil.isEmpty(personCode))
     3         return false;
     4     
     5     var 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}$)/;
     6     
     7     var isSuccess = regularExpression.test(personCode);
     8     if(isSuccess&&personCode.length==18){
     9         //前十七位加权因子
    10         var prefix = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
    11         //这是除以11后,可能产生的11位余数对应的验证码
    12         var suffix = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
    13         var idCardWiSum=0;  //用来保存前17位各自乖以加权因子后的总和 
    14         for(var i=0;i<17;i++){  
    15             idCardWiSum+=personCode[i]*prefix[i];  
    16         }
    17         var idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置
    18         return personCode[17] == suffix[idCardMod];
    19     }
    20     return isSuccess;
    21 } 
  • 相关阅读:
    Jupsh_flutter Android 收不到消息 / 排查不出请根据第 9 点说明提供信息
    angular表单 Dom获取表单值以及双向数据绑定
    angular中的组件以及组件中的模板合成
    Flutter开发的app进行设备判断是Ios还是android
    Java的封装
    GCD编程 之 略微提高篇
    多线程基础(六)GCD基础
    我遇到的CocoaPods的问题(也许后期会解决,持续更新)
    iOS之通过PaintCode快速实现交互动画的最方便方法 未解问题
    多线程基础(五)NSThread线程通信
  • 原文地址:https://www.cnblogs.com/y-z-x/p/11679791.html
Copyright © 2011-2022 走看看