`

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

 
阅读更多

转自: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校验身份证号和银行卡号

    js校验身份证号和银行卡号,内有js和调用方法,经过测试,非常好用

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

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

    判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)

    开发中,有时候,为了打造更好的用户体验,同时减轻服务器端的压力,需要对于一些如,手机号码,银行卡号,身份证号码进行格式校验 下面是判断银行卡号输入是否正确的代码(基于Luhn算法的格式校验): iOS代码: /...

    简单的登录注册系统

    vs2010上开发,用MFC实现的登录系统,具有三大功能: ... ... ... (1)每次调用软键盘,显示的数字及字母顺序都重新排列; (2)每填入一个字符显示的数字及字母顺序都重新排列;...(3)每次按下shift键,显示的数字及字母顺序...

    JS input正则验证大全

    JS input输入框 英文 中文 邮箱 手机号 银行卡 身份证等等各种正则验证 确保上传的内容合法合规,涉及侵权内容将会被移除

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

    该应用集成了身份证实名、三网手机实名和银行卡二、三、四元素校验等多种核验方式;旨在帮助有需求但无技术的用户快速、准确地完成身份验证,提升用户体验和工作效率;让实名认证、银行卡核验变得简单、高效!

    基于SSM的微银行系统和微信小程序源码

    微信小程序端用户先通过身份证、密码、姓名、手机号、银行账号、地区等信息进行注册,银行验证用户是否存在该银行卡,验证成功后。可以进行登录用户登录到微信小程序。首页界面提供了广告能播界面、理财产品推荐、...

    java_用于App验证数据验证的工具类的标准代码_android

    一些工具类代码块的标准代码,包括但不限于: ...验证是否银行卡号 验证身份证号码是否正确 判断是否为用户名账号(规则如下:用户名由下划线或字母开头,由数字、字母、下划线、点、减号组成的4-32位字符)

    基于java开发的转账项目开发源码

    一、主要功能点 APP 项目实践 ...必须完成开户并绑卡操作后才能进行转账等操作。 二、主要技术 后端springboot,前端不限 三、功能介绍 ...1、银行卡号 必填 2、图形验证码 篇幅要求写不完 包含的功能了

    分享MFRC523读身份证ID号源码和心得-电路方案

    可以读ISO14443B的身份证UID号,但读不了银行卡的UID,可能软件还需要改动一下。身份证的代码被注释了,要打开才行。希望给需要的朋友带来帮助。MFRC523读身份证ID号源码附件内容截图: 可能感兴趣的项目设计: RC523...

    基于微信小程序的南通农商银行微银行系统的设计与实现(小程序+ssm完整源码+LW+演示视频).zip

    微信小程序端用户先通过身份证、密码、姓名、手机号、银行账号、地区等信息进行注册,银行验证用户是否存在该银行卡,验证成功后。可以进行登录用户登录到微信小程序。首页界面提供了广告能播界面、理财产品推荐、...

    基于微信小程序的南通农商银行微银行系统的设计与实现(微信小程序完整前后端代码).zip

    微信小程序端用户先通过身份证、密码、姓名、手机号、银行账号、地区等信息进行注册,银行验证用户是否存在该银行卡,验证成功后。可以进行登录用户登录到微信小程序。首页界面提供了广告能播界面、理财产品推荐、...

    基于SSM的微银行系统的设计与实现微信小程序.zip

    微信小程序端用户先通过身份证、密码、姓名、手机号、银行账号、地区等信息进行注册,银行验证用户是否存在该银行卡,验证成功后。可以进行登录用户登录到微信小程序。首页界面提供了广告能播界面、理财产品推荐、...

    微信小程序毕业设计-微银行系统(源码+说明+演示录像)

    微信小程序端用户先通过身份证、密码、姓名、手机号、银行账号、地区等信息进行注册,银行验证用户是否存在该银行卡,验证成功后。可以进行登录用户登录到微信小程序。首页界面提供了广告能播界面、理财产品推荐、...

    用户的登陆注册

    这是一个实现用户登陆注册的源码文件,其中还有包括手机号,身份证,以及银行卡号的验证正则表达式。

    嵌入式系统程序完整性验证技术研究与实现.pdf

    讲述的是如何保证系统的安全和稳定,整个系统基于FPGA。 内容头部: 随着计算机技术的不断发展,嵌入式系统不断地渗透到人们...入式设备上面,如把身份证号码,银行卡帐号敏感信息记录到智能手机, PDA,掌上 电脑中。

    公交卡设计方案.pdf

    公交卡设计方案 2005年9月 一:系统目标 由华夏银行和公交公司联合发行的华夏万通卡,卡片上兼有华夏银行 的华夏卡(磁条卡)和公交公司的公交卡(IC卡)。华夏公交卡具备华 夏卡的全部功能,同时还可以在华夏银行各...

    ChecksumValidation:验证IBAN,银行帐户-开源

    ChecksumValidation是用于验证国际银行帐户(IBAN),信用卡号,德国身份证,德国护照和德国银行帐户的框架。 通过计算校验和来执行验证。 德国银行帐户的校验和由www.bundesbank.de维护和记录。 总而言之,...

    支付宝 欺诈信息验证 接入实例

    欺诈信息包括 姓名和身份证、手机、邮箱、银行卡、地址、IP、MAC等信息的验证。其实很简单,直接根据 官方接入文档进行开发既可。 本文档只是做了一些细化处理。并且存在自己系统相关的类,所以可能不适合每个人,但...

    兰大计算机安全技术离线作业答案.docx

    银行卡信息安全事件频发互联网站成数据泄露"重灾区" "卡在身上,钱却莫名其妙地被转走了",黑客5分钟就可以在网上获取1000个银行卡卡主的姓名、卡号、银行密码、身份证、电话号码等信息,近日曝光的一系列银行卡信息...

Global site tag (gtag.js) - Google Analytics