• 校验居民身份证的证照号码


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

    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 } 
  • 相关阅读:
    ASE19 团队项目 模型组 scrum report集合
    ASE19团队项目alpha阶段model组 scrum2 记录
    ASE19团队项目alpha阶段model组 scrum1 记录
    ASE第二次结对编程——Code Search
    jdk中集成的jre和单独安装的jre有什么区别?
    window, linux, mac 比较文件和文件夹的区别
    Java 调用python、ruby 等脚本引擎
    微软软件工程 第一周博客作业
    绩效考核(2018.5.28~2018.6.3)
    数据库需求文档
  • 原文地址:https://www.cnblogs.com/y-z-x/p/11679791.html
Copyright © 2020-2023  润新知