zoukankan      html  css  js  c++  java
  • 【原创】纯javascript实现银行卡号的Luhn验证或校验算法

        //Create Time:  07/28/2011
        //Operator:     liuzhengwei
        //Description:  银行卡号Luhn校验算法

        //luhn校验规则:16位银行卡号(19位通用):
       
        // 1.将未带校验位的 15(或18)位卡号从右依次编号 1 到 15(18),位于奇数位号上的数字乘以 2。
        // 2.将奇位乘积的个十位全部相加,再加上所有偶数位上的数字。
        // 3.将加法和加上校验位能被 10 整除。

      //bankno位银行卡号
        function luhnCheck(bankno){
            var lastNum=bankno.substr(bankno.length-1,1);//取出最后一位(与luhn进行比较)
       
            var first15Num=bankno.substr(0,bankno.length-1);//前15或18位
            var newArr=new Array();
            for(var i=first15Num.length-1;i>-1;i--){    //前15或18位倒序存进数组
                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);
           
            //计算luhn值
            var k= parseInt(sumTotal)%10==0?10:parseInt(sumTotal)%10;       
            var luhn= 10-k;
           
            if(lastNum==luhn){
            $("#banknoInfo").html("luhn验证通过");
            return true;
            }
            else{
            $("#banknoInfo").html("银行卡号必须符合luhn校验");
            return false;
            }       
        }

  • 相关阅读:
    UVa 1151 Buy or Build【最小生成树】
    UVa 216 Getting in Line【枚举排列】
    UVa 729 The Hamming Distance Problem【枚举排列】
    HDU 5214 Movie【贪心】
    HDU 5223 GCD
    POJ 1144 Network【割顶】
    UVa 11025 The broken pedometer【枚举子集】
    HDU 2515 Yanghee 的算术【找规律】
    Java基本语法
    Java环境变量,jdk和jre的区别,面向对象语言编程
  • 原文地址:https://www.cnblogs.com/wills2010/p/2134501.html
Copyright © 2011-2022 走看看