2013-02-16 1 views
2

Я пытаюсь выполнить реализацию алгоритма Luhm. У меня есть код C# для JavaScript. Я получил это портировано, и я думал, что это работает, но я не могу получить законные карты для проверки. Мой AMEX проверяет штраф, но мои два VISAs отказываются это делать. Вот код:Реализация алгоритма Луна в JavaScript

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#, но теперь у меня возникают сомнения ... Спасибо заранее!

+0

Подсказка: 'предупреждение (ParseInt ("54511187504546384725", 10))' и [ответ] (http://stackoverflow.com/a/ 12397870/265712). – meze

+0

Это работает с примерами здесь: http://en.wikipedia.org/wiki/Luhn_algorithm, но может не для больших чисел. –

ответ

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> 

Лучшее решение здесь

всех тестов, принятых в соответствии с

и заслуга