`

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

 
阅读更多

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

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

分享到:
评论

相关推荐

    js校验身份证号和银行卡号

    在JavaScript(简称js)编程中,验证身份证号和银行卡号是非常常见的需求,特别是在网页表单提交或者用户注册等场景。身份证号码验证确保了输入的有效性,防止非法或错误的输入,而银行卡号验证则可以保护用户的金融...

    Android-BankCardUtils自动格式化银行卡号手机号身份证号输入的工具类

    "Android-BankCardUtils"就是一个这样的工具类,它专注于自动格式化和验证银行卡号、手机号和身份证号。下面将详细讲解这个工具类的主要功能和实现原理。 首先,BankCardUtils的核心功能是根据银行卡号识别出对应的...

    OCR 自动识别身份证、银行卡号(包含识别哪个银行)和卡片文字

    总之,OCR技术在自动识别身份证、银行卡号和卡片文字方面的应用,极大地提高了工作效率,减少了人为错误,为现代信息化社会提供了强大的支持。通过理解并掌握这种技术,开发者可以构建出更加智能和便捷的解决方案。

    JavaScript截取手机号码 手机验证 身份证验证等等

    身份证验证涉及到更复杂的校验规则,包括地区代码、出生日期、顺序号和校验码等。以下是一个简单的18位身份证号码验证函数: ```javascript function validateIdCard(id) { const idRegex = /(^\d{15}$)|(^\d{18}$...

    基于OpenCV&Tesseract;-OCR实现银行卡号识别

    总之,银行卡号识别是一个涉及图像处理、计算机视觉和OCR技术的综合应用,通过OpenCV和Tesseract的合理组合,可以实现高效且准确的自动识别。在实际项目中,根据具体需求,可能还需要考虑到性能优化、多线程处理、...

    银行卡、身份证识别.zip

    项目可能实现了对银行卡号、发卡行等关键信息的自动提取,并通过某种算法或API验证这些信息的有效性。 身份证识别则更为复杂,涉及到个人信息的隐私保护和合规性。在本地实现身份证识别,开发者可能使用了Tesseract...

    iOS身份证银行卡扫描

    对于身份证和银行卡扫描,我们需要识别的主要是姓名、证件号、有效期等关键字段。 在iOS中,我们可以使用Apple的Vision框架来实现OCR功能。Vision框架提供了强大的计算机视觉功能,包括文本检测、人脸识别等。具体...

    华旭验证读卡软件身份证读取识别软件

    其中,华旭验证读卡软件是一款专门为身份证信息读取和验证设计的专业级应用软件,旨在为政府机关、金融系统、酒店管理等诸多行业提供高效、安全的身份证信息处理方案。本文将深入探讨这款软件的功能、特点以及在实际...

    适用于深度学习的银行卡数据集

    这个“适用于深度学习的银行卡数据集”正提供了一个宝贵的资源,用于训练和优化深度学习模型来识别银行卡。以下将详细介绍该数据集及其在深度学习中的应用。 首先,银行卡数据集包含2000张已标注的图片,这意味着每...

    Android开发指定区域拍照,身份证拍照,银行卡拍照

    在Android开发中,实现指定区域拍照、身份证拍照和银行卡拍照是一项常见的需求,主要应用于实名认证、支付验证等场景。为了实现这样的功能,开发者需要掌握以下几个关键知识点: 1. **权限申请**: 在Android系统...

    ios-Swift UITextField封装,电话号码,身份证,银行卡号,密码输入框.zip

    在这个名为"ios-Swift UITextField封装,电话号码,身份证,银行卡号,密码输入框.zip"的项目中,开发者对UITextField进行了封装,以适应特定的输入场景,如电话号码、身份证号、银行卡号以及密码输入。下面将详细介绍这...

    身份证验证开发包

    1. 金融服务:银行、支付平台等金融机构在开户、交易验证时需要用到身份证验证。 2. 电信运营商:办理手机卡、宽带业务时,需要实名制验证。 3. 住宿登记:酒店入住时,需要验证住客的身份信息。 4. 网络社交:网络...

    最新数据验证工具类java,身份证、手机号、qq...

    在IT行业中,数据验证是确保数据质量和安全的重要环节。针对给定的标题和描述,我们可以深入探讨...在实际开发中,还可以进一步扩展这些方法,增加更多的验证规则,如邮箱验证、银行卡号验证等,以满足更复杂的需求。

    广州临时身份证可以办银行卡.doc

    客户在办理银行卡时,需要携带身份证,并进行身份验证,设置取款密码,完成所有步骤后,会得到一张银行卡。如果同时办理网上银行业务,还会得到一张密保卡或者一个 U 盾。同时,银监会规定了银行卡办理的年龄限制和...

    Android-调用百度云api实现身份证识别和银行卡识别

    - 如果应用涉及到用户的敏感信息,如身份证号、银行卡号,需按照法律法规要求进行存储和传输,保障用户数据的安全。 8. **BaiduOCRDemo-master** - 这个文件名可能是示例项目的名称,里面可能包含了完整的代码...

    2012中国分省身份证号码前6位地区对照表.pdf

    在互联网实名制、手机卡实名制等政策实施过程中,通过核对身份证号码前6位,可以有效地对个人身份进行验证,确保网络安全和信息真实。同时,在涉及到国家秘密和关键信息基础设施的领域,对于身份证号码前6位地区的...

    JS input正则验证大全

    本资源包“JS input正则验证大全”主要聚焦于使用JavaScript进行输入框(input)的各种类型的数据验证,包括英文、中文、邮箱、手机号、银行卡和身份证等常见字段的正则校验规则。以下是对这些知识点的详细说明: 1...

    身份证读卡插件安装包.zip

    这些设备都是专门用于读取和验证身份证信息的专用硬件,通常用于公共服务场所如火车站、机场、酒店、银行等,用于快速验证个人身份。 2. **新中新WebAPI读卡接口说明**: “新中新webapi读卡接口说明.docx”文档很...

    fyne一站式身份证实名、银行卡二、三、四元素核验工具,全面满足您的身份核验需求!

    4. **银行卡三元素核验**:除了银行卡号和持卡人姓名,还增加了验证码或持卡人身份证号码的验证,提高了验证的安全级别。 5. **银行卡四元素核验**:在三元素的基础上,进一步增加了银行预留手机号码的验证,确保...

Global site tag (gtag.js) - Google Analytics