銀行卡號驗證js Luhn演算法

2021-07-06 01:19:40 字數 2099 閱讀 3431

//銀行卡號校驗

//description:  銀行卡號luhm校驗

//luhm校驗規則:16位銀行卡號(19位通用):

// 1.將未帶校驗位的 15(或18)位卡號從右依次編號 1 到 15(18),位於奇數字型大小上的數字乘以 2。

// 2.將奇位乘積的個十位全部相加,再加上所有偶數字上的數字。

// 3.將加法和加上校驗位能被 10 整除。

function luhmcheck(bankno)

var num = /^\d*$/;  //全數字

if (!num.exec(bankno))

//開頭6位

var strbin="10,18,30,35,37,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,58,60,62,65,68,69,84,87,88,94,95,98,99";    

if (strbin.indexof(bankno.substring(0, 2))== -1)

var lastnum=bankno.substr(bankno.length-1,1);//取出最後一位(與luhm進行比較)

var first15num=bankno.substr(0,bankno.length-1);//前15或18位

var newarr=new array();

for(var i=first15num.length-1;i>-1;i--)

var arrjishu=new array();  //奇數字*2的積 <9

var arrjishu2=new array(); //奇數字*2的積 >9

var arroushu=new array();  //偶數字陣列

for(var j=0;jif((j+1)%2==1)

else //偶數字

arroushu.push(newarr[j]);

}var jishu_child1=new array();//奇數字*2 >9 的分割之後的陣列個位數

var jishu_child2=new array();//奇數字*2 >9 的分割之後的陣列十位數

for(var h=0;hjishu_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;msumjishu=sumjishu+parseint(arrjishu[m]);

}for(var n=0;nsumoushu=sumoushu+parseint(arroushu[n]);

}for(var p=0;psumjishuchild1=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)

else        

}郵箱驗證         var reg_email=/^[a-za-z0-9](([_\.\-]?[a-za-z0-9]+)*)@([a-za-z0-9]+)(([\.\-]?[a-za-z0-9]+)*)\.([a-za-z])$/;

銀行卡號驗證 php

16 19 位卡號校驗位採用 luhn 校驗方法計算 第一步 把信用卡號倒序 61789372994 第二步 取出倒序後的奇數字置上的號碼,相加等到總和s1。eg s1 6 7 9 7 9 4 42 第三步 取出倒序後的偶數字置上的號碼,每個號碼乘以2。eg 2,16,6,4,18 第四步 把第三步...

驗證銀行卡號正確性的演算法

public static functionluhm cardno lastnum substr cardno,1 取出最後一位 與luhm進行比較 first15num substr cardno,0 1 前15或18位 newarr str split strrev first15num 前15...

銀行卡號規則

答案一 前6位數字為發卡銀行識別號 bin 由iso國際組織統一制定。最後一位是校驗位,由前面組成卡號的十多位數字 常見的iso卡號有13位 16位 19位 通過特定演算法計算。前6位和最後一位之間的數字為金融機構自定義的卡號,有些銀行採用發卡地代號加卡序號的方式編碼 有些銀行的卡則是全國大序列。只...