银行卡号校验,用js实现
时间: 2024-02-03 07:14:26 浏览: 146
银行卡号校验是一个比较常见的需求,可以通过 JavaScript 实现。以下是一个简单的示例代码:
```javascript
function checkBankCard(bankno) {
if (bankno.length < 16 || bankno.length > 19) {
return false;
}
var num = /^\d*$/; // 全数字正则表达式
if (!num.exec(bankno)) {
return false;
}
// 银行卡号校验规则
var strBin =
'10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99';
var lastNum = bankno.substr(bankno.length - 1, 1);
var first15Num = bankno.substr(0, bankno.length - 1);
var newArr = new Array();
for (var i = first15Num.length - 1; i > -1; i--) {
newArr.push(first15Num.substr(i, 1));
}
var arrJiShu = new Array(); // 奇数位*2的积 <9
var arrJiShu2 = new Array(); // 奇数位*2的积 >9
var arrOuShu = new Array(); // 偶数位数组
for (var j = 0; j < newArr.length; j++) {
if ((j + 1) % 2 == 1) { // 奇数位
if (parseInt(newArr[j]) * 2 < 9)
arrJiShu.push(parseInt(newArr[j]) * 2);
else
arrJiShu2.push(parseInt(newArr[j]) * 2);
} else // 偶数位
arrOuShu.push(newArr[j]);
}
var jishu_child1 = new Array(); // 奇数位*2 >9 的分割之后的数组个位数
var jishu_child2 = new Array(); // 奇数位*2 >9 的分割之后的数组十位数
for (var h = 0; h < arrJiShu2.length; h++) {
jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
}
var sumJiShu = 0; // 奇数位*2 < 9 的数组之和
var sumOuShu = 0; // 偶数位数组之和
var sumJiShuChild1 = 0; // 奇数位*2 >9 的分割之后的数组个位数之和
var sumJiShuChild2 = 0; // 奇数位*2 >9 的分割之后的数组十位数之和
var sumTotal = 0;
for (var m = 0; m < arrJiShu.length; m++) {
sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
}
for (var n = 0; n < arrOuShu.length; n++) {
sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
}
for (var p = 0; p < jishu_child1.length; p++) {
sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
}
// 计算总和
sumTotal = parseInt(sumJiShu) +
parseInt(sumOuShu) +
parseInt(sumJiShuChild1) +
parseInt(sumJiShuChild2);
// 计算Luhm值
var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
var luhm = 10 - k;
if (lastNum == luhm && strBin.indexOf(bankno.substring(0, 2)) != -1) {
return true;
} else {
return false;
}
}
```
调用示例:
```javascript
var bankno = '1234567890123456'; // 银行卡号
if (checkBankCard(bankno)) {
console.log('银行卡号格式正确');
} else {
console.log('银行卡号格式错误');
}
```
以上代码中,`checkBankCard` 函数接受一个参数 `bankno`,即需要校验的银行卡号。函数首先判断银行卡号的长度是否符合规范(16~19位),然后使用正则表达式判断银行卡号是否全是数字。接着,根据银行卡号校验规则对银行卡号进行校验,最后计算出 Luhm 值,判断校验结果是否正确。
需要注意的是,以上代码只是一个简单的示例,实际应用中可能需要根据不同的银行卡类型进行不同的校验规则。
阅读全文
相关推荐












