银行卡号和身份证号的验证

转自:http://kkvsyy.iteye.com/blog/1125105

关于上一节中的问题:银行卡号的校验我在网上找到一个简单的算法

Java代码   收藏代码
  1. /**  
  2.     * 校验银行卡卡号  
  3.     * @param cardId  
  4.     * @return  
  5.     */   
  6.    public   static   boolean  checkBankCard(String cardId) {  
  7.          char  bit = getBankCardCheckCode(cardId.substring( 0 , cardId.length() -  1 ));  
  8.          if (bit ==  'N' ){  
  9.              return   false ;  
  10.          }  
  11.          return  cardId.charAt(cardId.length() -  1 ) == bit;  
  12.    }  
  13.     
  14.    /**  
  15.     * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位  
  16.     * @param nonCheckCodeCardId  
  17.     * @return  
  18.     */   
  19.    public   static   char  getBankCardCheckCode(String nonCheckCodeCardId){  
  20.        if (nonCheckCodeCardId ==  null  || nonCheckCodeCardId.trim().length() ==  0   
  21.                || !nonCheckCodeCardId.matches("\\d+" )) {  
  22.         //如果传的不是数据返回N   
  23.            return   'N' ;  
  24.        }  
  25.        char [] chs = nonCheckCodeCardId.trim().toCharArray();  
  26.        int  luhmSum =  0 ;  
  27.        for ( int  i = chs.length -  1 , j =  0 ; i >=  0 ; i--, j++) {  
  28.            int  k = chs[i] -  '0' ;  
  29.            if (j %  2  ==  0 ) {  
  30.                k *= 2 ;  
  31.                k = k / 10  + k %  10 ;  
  32.            }  
  33.            luhmSum += k;             
  34.        }  
  35.        return  (luhmSum %  10  ==  0 ) ?  '0'  : ( char )(( 10  - luhmSum %  10 ) +  '0' );  
  36.    }  

 关于身份证件号码的校验,比较严格的控制

Js代码   收藏代码
  1. /**  
  2.  * author:qiaoyongjun  
  3.  * StrNo:用户输入的身份证件号码  
  4.  * _id:用来承载错误信息的控件ID号,用来进行友好提示  
  5.  *判断身份证号码格式函数  
  6.  *公民身份号码是特征组合码,  
  7.  *排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码  
  8.  *如果验证通过 返回 true  
  9.  */   
  10. function  isChinaIDCard(StrNo, _Id) {  
  11.     var  error = document.getElementById(_Id);  
  12.     StrNo = StrNo.toString();  
  13.     if  (StrNo.length == 15) {  
  14.         if  (!isValidDate( "19"  + StrNo.substr(6, 2), StrNo.substr(8, 2),  
  15.                 StrNo.substr(10, 2), _Id)) {  
  16.             return   false ;  
  17.         }  
  18.     } else   if  (StrNo.length == 18) {  
  19.         if  (!isValidDate(StrNo.substr(6, 4), StrNo.substr(10, 2), StrNo  
  20.                 .substr(12, 2), _Id)) {  
  21.             return   false ;  
  22.         }  
  23.     } else  {  
  24.         error.innerHTML = "" ;  
  25.         error.innerHTML = "输入的身份证号码必须为15位或者18位!" ;  
  26.         return   false ;  
  27.     }  
  28.   
  29.     if  (StrNo.length == 18) {  
  30.         var  a, b, c  
  31.         if  (!isNumber(StrNo.substr(0, 17))) {  
  32.   
  33.             error.innerHTML = "" ;  
  34.             error.innerHTML = "身份证号码错误,前17位不能含有英文字母!" ;  
  35.             return   false ;  
  36.   
  37.         }  
  38.         a = parseInt(StrNo.substr(0, 1)) * 7 + parseInt(StrNo.substr(1, 1))  
  39.                 * 9 + parseInt(StrNo.substr(2, 1)) * 10;  
  40.         a = a + parseInt(StrNo.substr(3, 1)) * 5  
  41.                 + parseInt(StrNo.substr(4, 1)) * 8  
  42.                 + parseInt(StrNo.substr(5, 1)) * 4;  
  43.         a = a + parseInt(StrNo.substr(6, 1)) * 2  
  44.                 + parseInt(StrNo.substr(7, 1)) * 1  
  45.                 + parseInt(StrNo.substr(8, 1)) * 6;  
  46.         a = a + parseInt(StrNo.substr(9, 1)) * 3  
  47.                 + parseInt(StrNo.substr(10, 1)) * 7  
  48.                 + parseInt(StrNo.substr(11, 1)) * 9;  
  49.         a = a + parseInt(StrNo.substr(12, 1)) * 10  
  50.                 + parseInt(StrNo.substr(13, 1)) * 5  
  51.                 + parseInt(StrNo.substr(14, 1)) * 8;  
  52.         a = a + parseInt(StrNo.substr(15, 1)) * 4  
  53.                 + parseInt(StrNo.substr(16, 1)) * 2;  
  54.         b = a % 11;  
  55.         if  (b == 2)  //最后一位为校验位     
  56.         {  
  57.             c = StrNo.substr(17, 1).toUpperCase(); //转为大写X     
  58.         } else  {  
  59.             c = parseInt(StrNo.substr(17, 1));  
  60.         }  
  61.         switch  (b) {  
  62.         case  0:  
  63.             if  (c != 1) {  
  64.                 error.innerHTML = "" ;  
  65.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:1" ;  
  66.                 return   false ;  
  67.             }  
  68.             break ;  
  69.         case  1:  
  70.             if  (c != 0) {  
  71.                 error.innerHTML = "" ;  
  72.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:0" ;  
  73.                 return   false ;  
  74.             }  
  75.             break ;  
  76.         case  2:  
  77.             if  (c !=  "X" ) {  
  78.                 error.innerHTML = "" ;  
  79.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:X" ;  
  80.                 return   false ;  
  81.             }  
  82.             break ;  
  83.         case  3:  
  84.             if  (c != 9) {  
  85.                 error.innerHTML = "" ;  
  86.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:9" ;  
  87.                 return   false ;  
  88.             }  
  89.             break ;  
  90.         case  4:  
  91.             if  (c != 8) {  
  92.                 error.innerHTML = "" ;  
  93.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:8" ;  
  94.                 return   false ;  
  95.             }  
  96.             break ;  
  97.         case  5:  
  98.             if  (c != 7) {  
  99.                 error.innerHTML = "" ;  
  100.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:7" ;  
  101.                 return   false ;  
  102.             }  
  103.             break ;  
  104.         case  6:  
  105.             if  (c != 6) {  
  106.                 error.innerHTML = "" ;  
  107.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:6" ;  
  108.                 return   false ;  
  109.             }  
  110.             break ;  
  111.         case  7:  
  112.             if  (c != 5) {  
  113.                 error.innerHTML = "" ;  
  114.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:5" ;  
  115.                 return   false ;  
  116.             }  
  117.             break ;  
  118.         case  8:  
  119.             if  (c != 4) {  
  120.                 error.innerHTML = "" ;  
  121.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:4" ;  
  122.                 return   false ;  
  123.             }  
  124.             break ;  
  125.         case  9:  
  126.             if  (c != 3) {  
  127.                 error.innerHTML = "" ;  
  128.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:3" ;  
  129.                 return   false ;  
  130.             }  
  131.             break ;  
  132.         case  10:  
  133.             if  (c != 2) {  
  134.                 error.innerHTML = "" ;  
  135.                 error.innerHTML = "身份证号码校验位错:最后一位应该为:2" ;  
  136.                 return   false ;  
  137.             }  
  138.         }  
  139.     } else  { //15位身份证号     
  140.         if  (!isNumber(StrNo)) {  
  141.             error.innerHTML = "" ;  
  142.             error.innerHTML = "身份证号码错误,前15位不能含有英文字母!" ;  
  143.             return   false ;  
  144.         }  
  145.     }  
  146.     return   true ;  
  147.   
  148. }  
  149. /**  
  150.  * 验证身份证件中的日期是否合法有效  
  151.  * @param iY  
  152.  * @param iM  
  153.  * @param iD  
  154.  * @param _id  
  155.  * @return  
  156.  */   
  157. function  isValidDate(iY, iM, iD, _id) {  
  158.     if  (iY > 2200 || iY < 1900 || !isNumber(iY)) {  
  159.         document.getElementById(_id).innerHTML = "" ;  
  160.         document.getElementById(_id).innerHTML = "输入身份证号,年度"  + iY +  "非法!" ;  
  161.         return   false ;  
  162.     }  
  163.     if  (iM > 12 || iM <= 0 || !isNumber(iM)) {  
  164.         document.getElementById(_id).innerHTML = "" ;  
  165.         document.getElementById(_id).innerHTML = "输入身份证号,月份"  + iM +  "非法!" ;  
  166.         return   false ;  
  167.     }  
  168.     if  (iD > 31 || iD <= 0 || !isNumber(iD)) {  
  169.         document.getElementById(_id).innerHTML = "" ;  
  170.         document.getElementById(_id).innerHTML = "输入身份证号,日期"  + iD +  "非法!" ;  
  171.         return   false ;  
  172.     }  
  173.     return   true ;  
  174. }  
  175. /**  
  176.  * 验证是否为数字  
  177.  * @param oNum  
  178.  * @return  
  179.  */   
  180. function  isNumber(oNum) {  
  181.     if  (!oNum)  
  182.         return   false ;  
  183.     var  strP = /^\d+(\.\d+)?$/;  
  184.     if  (!strP.test(oNum))  
  185.         return   false ;  
  186.     try  {  
  187.         if  (parseFloat(oNum) != oNum)  
  188.             return   false ;  
  189.     } catch  (ex) {  
  190.         return   false ;  
  191.     }  
  192.     return   true ;  
  193. }  

 注:关于银行卡号的校验 有什么更好的方法 请提出来 供大家研究 谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值