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

news/2024/11/25 18:37:25/

转自: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. }  

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


http://www.ppmy.cn/news/305323.html

相关文章

根据银行卡号判断银行卡是否正确与归属银行

校验过程&#xff1a; 1.从卡号的最后一位数字开始&#xff0c;逆向将奇数位&#xff08;1&#xff0c;3&#xff0c;5 等等相加&#xff09; 2.从卡号最后一位数字开始&#xff0c;逆向将偶数位数字&#xff0c;先乘以2&#xff0c;如果乘积为两位数&#xff0c;将个位数字相加…

获取银行卡所属银行,验证银行卡号是否正确

需求&#xff1a;用户输入银行卡卡号&#xff0c;需要验证卡号格式&#xff0c;自动填充所属银行。 第一想到的是正则表达式&#xff0c;后面尝试多次&#xff0c;卡号验证不太准确。 换一种思路&#xff1a;用户输入卡号&#xff0c;进入java后台&#xff0c;对卡号进行验证&…

根据银行卡号区分信用卡还是储蓄卡

https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charsetutf-8&cardBinChecktrue&cardNo‘.$acctNo 这是支付宝的一个接口&#xff0c;直接跟上要查看的卡号就行。

输入银行卡号,可以自动识别到银行卡类型的方法

根据银行卡号信息可以自动识别到银行卡类型 下载依赖&#xff1a;npm install bankcardinfo 使用方法&#xff1a; 1: var BIN require(‘bankcardinfo’); 2&#xff1a;调用:两个参数&#xff0c;一个是卡号&#xff0c;一个是报错&#xff0c;以及返回的信息 BIN.getBank…

10.银行卡号识别

目录 1 项目介绍 2 代码实现 2.1 导入库 2.2 设置参数 2.3 定义银行卡信息 2.4 定义显示图片函数 2.5 处理模板 2.5.1 读入图片 2.5.2 灰度处理 2.5.3 二值处理 2.5.4 轮廓检测 2.5.5 轮廓排序 2.5.6 把模板中每一个数字分别切出来 2.6 处理图像 …

泛微OA_E9之输入银行卡号,每4位自动添加一个空格

目录 1、需求示例1.1 需求1.2 示例 2、思路3、步骤3.1 本次使用E9流程表单前端接口API介绍3.1.1 获取单个字段值3.1.2 字段区域绑定动作事件3.1.3 表单字段值变化触发事件 3.2 上代码 4、总结 1、需求示例 1.1 需求 输入银行卡号&#xff0c;每4位自动添加一个空格。 1.2 示…

Android之输入银行卡号判断属于哪个银行

一&#xff1a;效果图&#xff1a; 二&#xff1a;实现步骤&#xff1a; 1.xml布局实现&#xff0c;两个edittext就行了 <LinearLayoutandroid:id"id/lin_yhkh"android:layout_width"fill_parent"android:layout_height"48dp"android:layou…

通过银行卡号识别银行

安装依赖 npm install bankcardinfo 引入 import getBankcardinfo from bankcardinfo Vue.prototype.$getBankcardinfo getBankcardinfo 使用方法 look() {try {let res this.$getBankcardinfo.getBankBin(this.form.bankNo);console.log(res);if (res._rejectionHandle…