js 验证银行卡号

本文介绍了银行卡号的Luhm校验算法,该算法用于验证16位或19位卡号的正确性。首先介绍算法步骤:1) 去除校验位后,从右至左对偶数位乘2并逐位相加,奇数位直接相加;2) 将所有位数相加,加上校验位;3) 结果应能被10整除。最后,作者邀请读者分享问题、见解或更好的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先了解一下银行卡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;
        }        

    }

看完之后,欢迎大家提出问题和见解,或者说你有什么更好的方法提供出来,供大家参考。