我的Luhn算法实现有什么问题?

时间:2015-12-05 08:41:05

标签: javascript algorithm

我正在尝试实施Luhn的信用卡检查算法。我正在遵循代码大战问题中给出的所有步骤,甚至得到正确的结果,但在线评判不接受解决方案。我究竟做错了什么?我知道解决方案是天真的,它是一种蛮力,但仍然为什么我无法通过测试用例?

在此Kata中,您将实施Luhn算法,该算法用于帮助验证信用卡号。

给定最多16位数的正整数,如果是有效的信用卡号,则返回true,如果不是,则返回false。

以下是算法:

如果有偶数个数字,则从第一个开始,每隔一个数字加倍,如果有一个奇数个数字,则从第二个开始,每隔一个数字加倍。另一种思考方式是,从右到左,从第二位到最后一位开始,每隔一位数加倍。

1714 => [1 *,7,1 *,4] => [2,7,2,4]

12345 => [1,2 *,3,4 *,5] => [1,4,3,8,5]

891 => [8,9 *,1] => [8,18,1] 如果得到的加倍数大于9,则将其替换为自己的数字之和,或从中减去9。

[8,18 *,1] => [8,(1 + 8),1] => [8,9,1]

(或)

[8,18 *,1] => [8,(18-9),1] => [8,9,1] 求和所有最终数字  [8,9,1] => 8 + 9 + 1 => 18 最后,将该总和除以10.如果余数等于零,则原始信用卡号有效。

18(模量)10 => 8.

8不等于0,因此891不是有效的信用卡号。

function validate(n){
    var num = [];
    var i=0;
    var v=n.toString();


    while(i<v.length)
    {
        num.push(parseInt(v[i]));
        i++;
    }

    if(num.length%2===0)
    {
        i=0;
        while(i<num.length)
        {
            if((i+1)%2===1)
            {
                num[i]=num[i]*2;
            }
            i++;
        }
    }
    else
    {
        i=0;
        while(i<num.length)
        {
            if((i+1)%2===0)
            {
                num[i]=num[i]*2;
            }
            i++;
        }
    }



        i=0;
        if(num.length%2===0)
        {
            while(i<num.length)
            {
                if((i+1)%2===1)
                {
                    if(num[i]>9)
                    {
                        num[i]=num[i]-9;
                    }
                }
                i++;
            }
        }
        else
        {
            while(i<num.length)
            {
                if((i+1)%2===0)
                {
                    if(num[i]>9)
                    {
                        num[i]=num[i]-9;
                    }
                }
                i++;
            }
        }


        i=0;
        var sum=0;
        while(i<num.length)
        {
            sum+=num[i];
            i++;
        }

        if(sum%10===0)
        {
            return true;
        }
        else
        {
            return false;
        }
}

0 个答案:

没有答案