关于上一节中的问题:银行卡号的校验我在网上找到一个简单的算法
/** * 校验银行卡卡号 * @param cardId * @return */ public static boolean checkBankCard(String cardId) { char bit = getBankCardCheckCode(cardId.substring(0, cardId.length() - 1)); if(bit == 'N'){ return false; } return cardId.charAt(cardId.length() - 1) == bit; } /** * 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 * @param nonCheckCodeCardId * @return */ public static char getBankCardCheckCode(String nonCheckCodeCardId){ if(nonCheckCodeCardId == null || nonCheckCodeCardId.trim().length() == 0 || !nonCheckCodeCardId.matches("\\d+")) { //如果传的不是数据返回N return 'N'; } char[] chs = nonCheckCodeCardId.trim().toCharArray(); int luhmSum = 0; for(int i = chs.length - 1, j = 0; i >= 0; i--, j++) { int k = chs[i] - '0'; if(j % 2 == 0) { k *= 2; k = k / 10 + k % 10; } luhmSum += k; } return (luhmSum % 10 == 0) ? '0' : (char)((10 - luhmSum % 10) + '0'); }
关于身份证件号码的校验,比较严格的控制
/** * author:qiaoyongjun * StrNo:用户输入的身份证件号码 * _id:用来承载错误信息的控件ID号,用来进行友好提示 *判断身份证号码格式函数 *公民身份号码是特征组合码, *排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码 *如果验证通过 返回 true */ function isChinaIDCard(StrNo, _Id) { var error = document.getElementById(_Id); StrNo = StrNo.toString(); if (StrNo.length == 15) { if (!isValidDate("19" + StrNo.substr(6, 2), StrNo.substr(8, 2), StrNo.substr(10, 2), _Id)) { return false; } } else if (StrNo.length == 18) { if (!isValidDate(StrNo.substr(6, 4), StrNo.substr(10, 2), StrNo .substr(12, 2), _Id)) { return false; } } else { error.innerHTML = ""; error.innerHTML = "输入的身份证号码必须为15位或者18位!"; return false; } if (StrNo.length == 18) { var a, b, c if (!isNumber(StrNo.substr(0, 17))) { error.innerHTML = ""; error.innerHTML = "身份证号码错误,前17位不能含有英文字母!"; return false; } a = parseInt(StrNo.substr(0, 1)) * 7 + parseInt(StrNo.substr(1, 1)) * 9 + parseInt(StrNo.substr(2, 1)) * 10; a = a + parseInt(StrNo.substr(3, 1)) * 5 + parseInt(StrNo.substr(4, 1)) * 8 + parseInt(StrNo.substr(5, 1)) * 4; a = a + parseInt(StrNo.substr(6, 1)) * 2 + parseInt(StrNo.substr(7, 1)) * 1 + parseInt(StrNo.substr(8, 1)) * 6; a = a + parseInt(StrNo.substr(9, 1)) * 3 + parseInt(StrNo.substr(10, 1)) * 7 + parseInt(StrNo.substr(11, 1)) * 9; a = a + parseInt(StrNo.substr(12, 1)) * 10 + parseInt(StrNo.substr(13, 1)) * 5 + parseInt(StrNo.substr(14, 1)) * 8; a = a + parseInt(StrNo.substr(15, 1)) * 4 + parseInt(StrNo.substr(16, 1)) * 2; b = a % 11; if (b == 2) //最后一位为校验位 { c = StrNo.substr(17, 1).toUpperCase(); //转为大写X } else { c = parseInt(StrNo.substr(17, 1)); } switch (b) { case 0: if (c != 1) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:1"; return false; } break; case 1: if (c != 0) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:0"; return false; } break; case 2: if (c != "X") { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:X"; return false; } break; case 3: if (c != 9) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:9"; return false; } break; case 4: if (c != 8) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:8"; return false; } break; case 5: if (c != 7) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:7"; return false; } break; case 6: if (c != 6) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:6"; return false; } break; case 7: if (c != 5) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:5"; return false; } break; case 8: if (c != 4) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:4"; return false; } break; case 9: if (c != 3) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:3"; return false; } break; case 10: if (c != 2) { error.innerHTML = ""; error.innerHTML = "身份证号码校验位错:最后一位应该为:2"; return false; } } } else {//15位身份证号 if (!isNumber(StrNo)) { error.innerHTML = ""; error.innerHTML = "身份证号码错误,前15位不能含有英文字母!"; return false; } } return true; } /** * 验证身份证件中的日期是否合法有效 * @param iY * @param iM * @param iD * @param _id * @return */ function isValidDate(iY, iM, iD, _id) { if (iY > 2200 || iY < 1900 || !isNumber(iY)) { document.getElementById(_id).innerHTML = ""; document.getElementById(_id).innerHTML = "输入身份证号,年度" + iY + "非法!"; return false; } if (iM > 12 || iM <= 0 || !isNumber(iM)) { document.getElementById(_id).innerHTML = ""; document.getElementById(_id).innerHTML = "输入身份证号,月份" + iM + "非法!"; return false; } if (iD > 31 || iD <= 0 || !isNumber(iD)) { document.getElementById(_id).innerHTML = ""; document.getElementById(_id).innerHTML = "输入身份证号,日期" + iD + "非法!"; return false; } return true; } /** * 验证是否为数字 * @param oNum * @return */ function isNumber(oNum) { if (!oNum) return false; var strP = /^\d+(\.\d+)?$/; if (!strP.test(oNum)) return false; try { if (parseFloat(oNum) != oNum) return false; } catch (ex) { return false; } return true; }
注:关于银行卡号的校验 有什么更好的方法 请提出来 供大家研究 谢谢
相关推荐
银行卡号正确性校验,支持所有银行卡号。符合Luhm校验
针对身份证号码的校验,以及能自动将身份证从15位升级为18位
身份证和银行卡号码的最后一位都是用前面的数字计算而来的校验码,所以可以在一定程度上减少误输入的可能。 此文件包含身份证、19位银行卡号码校验,年龄提取,性别提取的公式。 使用方式,非常简单,打开此文件,...
银行卡号正则校验js工具类
这个是银行卡校验的工具类,所有银行都可以校验。
车架号校验工具类,Java实现代码。通过目前主流的车架号校验规则进行校验。提供车架号校验,以及虚拟车架号生成。车架号生成仅供测试,请勿做他用
校验输入的银行卡正确
最完善的身份证号码合法性校验Java算法,适合Android平台,可以直接拿来在项目中使用,正则表达式。
JAVA验证身份证号码校验码是否正确
Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验
Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!Java居民身份证号校验规则!
里面包括一个资源类和一个测试类,需要将银行信息放在classpath下,测试加载spring的配置文件更改成自己的即可运行
由于需要和蓝牙通讯,协议需要用到校验和,找了很久才找到,给大家共享。java校验和算法绝对可以用。
下面小编就为大家带来一篇判断用户输入的银行卡号是否正确的方法(基于Luhn算法的格式校验)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
js校验身份证号和银行卡号,内有js和调用方法,经过测试,非常好用
银行卡校验JS代码,请大家参考!
一个java写的身份证号码校验类,保存为*.java文件
java和js实现的部分常用校验器,包括: 1、身份证号校验; 2、电话号码校验(移动电话或者固话); 3、车牌号校验; 4、车架号VIN码校验。 具体网址:http://blog.csdn.net/jodenhe/article/details/77962753
基于国内银行卡号制定规则,又由于卡号的客户端校验资源缺乏,又由于目前接触到的银行项目,故自己用js写了一个Luhm校验算法,不足之处还望各位大侠赐教! 附件为测试Demo,直接浏览即可。