先了解一下银行卡luhm算法,算法比较简单。(16位和19位卡号通用)
1、除去校验位后,从右至左,将卡号按位编码,从0开始。
2、将偶数位×2,得到的结果按位相加,比如偶数为6,×2=12,则将1和2相加=3;奇数位则直接参与相加;
3、重复步骤2得到总和,该总和加上校验位应能被10整除,否则校验位不正确。
var bankno = "";sss
function checkNum(){var account = $("#banknum").val();
luhmCheck(account);
}
function luhmCheck(bankno){
bankno = bankno.replace(/\s/ig,'');
var lastNum=bankno.substring(bankno.length-1,bankno.length);//取出最后一位(与luhm进行比较)
var first15Num=bankno.substring(0,bankno.length-1);//前15或18位
var newArr=new Array();
var sumTotal = 0;
for(var i = first15Num.length-1,j=0;i>=0;i--,j++){
var yuansu= parseInt(first15Num[i]);
if(j%2==0){
yuansu *= 2;
yuansu = parseInt(yuansu/10)+parseInt(yuansu%10);
}
sumTotal += parseInt(yuansu);
}
alert(sumTotal+"sumTotal");
//计算Luhm值
var k= parseInt(sumTotal)%10==0?0:10-parseInt(sumTotal)%10;
if(lastNum==k){
alert("gule");
return true;
}
else{
alert("格式错误");
return false;
}
}
看完之后,欢迎大家提出问题和见解,或者说你有什么更好的方法提供出来,供大家参考。