JS银行卡号Luhm校验
1 function luhmCheck(bankno){ 2 var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(与luhm进行比较) 3 4 var first15Num=bankno.substr(0,bankno.length-1);//前15或18位 5 var newArr=new Array(); 6 for(var i=first15Num.length-1;i>-1;i--){ //前15或18位倒序存进数组 7 newArr.push(first15Num.substr(i,1)); 8 } 9 var arrJiShu=new Array(); //奇数位*2的积<9 10 var arrJiShu2=new Array(); //奇数位*2的积>9 11 12 var arrOuShu=new Array(); //偶数位数组 13 for(var j=0;j<newArr.length;j++){ 14 if((j+1)%2==1){//奇数位 15 if(parseInt(newArr[j])*2<9) 16 arrJiShu.push(parseInt(newArr[j])*2); 17 else 18 arrJiShu2.push(parseInt(newArr[j])*2); 19 } 20 else //偶数位 21 arrOuShu.push(newArr[j]); 22 } 23 24 var jishu_child1=new Array();//奇数位*2>9 的分割之后的数组个位数 25 var jishu_child2=new Array();//奇数位*2>9 的分割之后的数组十位数 26 for(var h=0;h<arrJiShu2.length;h++){ 27 jishu_child1.push(parseInt(arrJiShu2[h])%10); 28 jishu_child2.push(parseInt(arrJiShu2[h])/10); 29 } 30 31 var sumJiShu=0; //奇数位*2< 9 的数组之和 32 var sumOuShu=0; //偶数位数组之和 33 var sumJiShuChild1=0; //奇数位*2>9 的分割之后的数组个位数之和 34 var sumJiShuChild2=0; //奇数位*2>9 的分割之后的数组十位数之和 35 var sumTotal=0; 36 for(var m=0;m<arrJiShu.length;m++){ 37 sumJiShu=sumJiShu+parseInt(arrJiShu[m]); 38 } 39 40 for(var n=0;n<arrOuShu.length;n++){ 41 sumOuShu=sumOuShu+parseInt(arrOuShu[n]); 42 } 43 44 for(var p=0;p<jishu_child1.length;p++){ 45 sumJiShuChild1=sumJiShuChild1+parseInt(jishu_child1[p]); 46 sumJiShuChild2=sumJiShuChild2+parseInt(jishu_child2[p]); 47 } 48 //计算总和 49 sumTotal=parseInt(sumJiShu)+parseInt(sumOuShu)+parseInt(sumJiShuChild1)+parseInt(sumJiShuChild2); 50 51 //计算Luhm值 52 var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10; 53 var luhm= 10-k; 54 55 if(lastNum==luhm){ 56 return true; 57 } 58 else{ 59 return false; 60 } 61 }