Zero丨丶小余

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

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 } 

 

posted on 2019-10-15 19:31  Zero丨丶小余  阅读(219)  评论(0编辑  收藏  举报