难以构建Luhn算法

时间:2019-11-28 09:56:58

标签: javascript

我想构建通常用于验证信用卡号的Luhn算法。鲁恩的算法如下:

  • 隔离每个数字,从右移左开始,每秒钟加倍。如果加倍的值大于9,则减去9。
  • 所有转换后的数字加起来。
  • 当且仅当总和以0结尾时,原始数字才根据Luhn算法有效。

    function isValid(number) {
      return LuhnDigitSum(number) % 10 === 0;
    }

    function LuhnDigitSum(number) {
      let sum = 0;
      let num_str = number.toString();
      let reversed_num = num_str.split("").reverse().join("");
      for (let i = 0; i < reversed_num.length; i++) {
        let digit = parseInt(reversed_num[i]);
        if (i % 2 !== 0 && (digit * 2) <= 9) {
          digit = digit * 2;
          sum += digit;
        }
        if (i % 2 !== 0 && (digit * 2) > 9) {
          digit = (digit * 2) - 9;
          sum += digit;
        }
        if (i % 2 === 0) {
          sum += digit;
        }
      }
      return sum;
    }

当我运行代码时,卡号应该是有效的时似乎无效,此外,总和值不正确。

非常感谢您的帮助。谢谢!

0 个答案:

没有答案