在JavaScript中实施Luhn算法

问题描述 投票:2回答:2

我正在尝试将C#中的Luhm算法实现移植到JavaScript。我将其移植过来,并认为它可以运行,但是我无法获得合法的卡进行验证。我的AMEX可以很好地通过验证,但是我的两个VISA拒绝这样做。这是代码:

luhn = function (number) {
    var _deltas = [0, 1, 2, 3, 4, -4, -3, -2, -1, 0],
        _checksum = 0,
        _digits = [],
        i,
        j;

    while (number != 0) {
        _digits.push(parseInt((number % 10), 10));

        number = parseInt((number / 10), 10);
    }

    for (i = (_digits.length - 1), j = _digits.length; i > -1; i--) {
        _digit = _digits[i];
        _checksum += _digit;
        _checksum += ((((i - j) % 2) === 0) ? _deltas[_digit] : 0);
    }

    return ((_checksum % 10) === 0);
};

有人可以指出错误的正确方向吗?我以为这在C#版本中可以正常工作,但是现在我有疑问了……预先感谢!

javascript luhn
2个回答
0
投票
  <script>
      // takes the form field value and returns true on valid number
    function valid_credit_card(value) {
      // accept only digits, dashes or spaces
        if (/[^0-9-\s]+/.test(value)) return false;

        // The Luhn Algorithm. It's so pretty.
        var nCheck = 0, nDigit = 0, bEven = false;
        value = value.replace(/\D/g, "");

        for (var n = value.length - 1; n >= 0; n--) {
            var cDigit = value.charAt(n),
                  nDigit = parseInt(cDigit, 10);

            if (bEven) {
                if ((nDigit *= 2) > 9) nDigit -= 9;
            }

            nCheck += nDigit;
            bEven = !bEven;
        }

        return (nCheck % 10) == 0;
    }

    console.log(valid_credit_card("5610591081018250"),"valid_credit_card Validation");
  </script>

此处为最佳解决方案

所有测试用例都根据]通过了>


0
投票

对于其他人,下面是我提交的测试解决方案:)

© www.soinside.com 2019 - 2024. All rights reserved.