主要说了MasterCard.
Luhn算法有四步:
1.从卡号的最后一个数字开市,并逆向将奇数位置的数字相加.
2.将奇数位置的数字先*2,如果是两位数,就将这两位数相加,然后将结果放到总和中.
3.将两个总和相加将结果与10取膜 ,如果整除,则为正确的MasterCard.
以下为检验方法:
- # <script>
- # function isValidMasterCard(sText){
- # var reMasterCard=/^(5[1-5]/d{2})[/s/-]?(/d{4})[/s/-]?(/d{4})[/s/-](/d{4})$/;
- #
- # if(reMasterCard.test(sText)){
- # var sCardNum=RegExp.$1+RegExp.$2+RegExp.$3+RegExp.$4;
- # alert(sCardNum);
- # //Luhn algorithm here
- # return luhnCheckSum(sCardNum);
- # }else{
- # return
- # }
- # }
- #
- # function luhnCheckSum(sCardNum){
- # var iOddSum=0;
- # var iEvenSum=0;
- # var bIsOdd=true;
- #
- # for(var i=sCardNum.length-1;i>=0;i--){
- # //alert("length="+sCardNum.length);
- # //alert("sCardNum.char("+i+")="+sCardNum.charAt(i));
- # var iNum=parseInt(sCardNum.charAt(i));
- #
- # if(bIsOdd){
- # //反向奇數求和
- # iOddSum+=iNum;
- #
- # }else{
- # //偶數
- # if(iNum>9){
- # iNum=eval(iNum.toString().split("").join("+"));
- # }
- # iEvenSum+=iNum;
- #
- # }
- # bIsOdd=!bIsOdd;
- # }
- # return ((iEvenSum+iOddSum)%10==0);
- # }
- #
- # alert(isValidMasterCard("5432 1234 5678 9012"));
- # alert(isValidMasterCard("5432-1234-5678-9012"));
- #
- # </script>