Проверка кредитных карт на стороне клиента - PullRequest
11 голосов
/ 01 ноября 2008

Есть ли у кого-нибудь библиотека или фрагмент JavaScript для проверки контрольной цифры кредитных карт до того, как пользователь нажмет кнопку Отправить?

Ответы [ 6 ]

20 голосов
/ 01 ноября 2008

Плагин jQuery Validation имеет метод для проверки номеров кредитных карт.

Существуют и другие специфические скрипты:

Большинство из них используют алгоритм Луна .

10 голосов
/ 21 декабря 2013

Возможно, OP больше не следует этой теме, но это может быть полезно для кого-то еще:

http://jquerycreditcardvalidator.com

Он проверяет тип карты, проверяет ее длину и проверяет мод 10 с помощью алгоритма Луна.

7 голосов
/ 22 апреля 2014

Этот фрагмент можно использовать для проверки 16-значных номеров карт с помощью алгоритма Луна :

function validateCardNumber(number) {
    var regex = new RegExp("^[0-9]{16}$");
    if (!regex.test(number))
        return false;

    return luhnCheck(number);
}

function luhnCheck(val) {
    var sum = 0;
    for (var i = 0; i < val.length; i++) {
        var intVal = parseInt(val.substr(i, 1));
        if (i % 2 == 0) {
            intVal *= 2;
            if (intVal > 9) {
                intVal = 1 + (intVal % 10);
            }
        }
        sum += intVal;
    }
    return (sum % 10) == 0;
}
3 голосов
/ 16 июня 2015

Алгоритм Луна (также известный как Формула Луна ) полезен для проверки различных идентификационных номеров (например, номеров кредитных карт , IMEI ).

Я опускаю объяснение алгоритма, потому что он уже был раскрыт другими, но если вам нужна самая быстрая реализация Javascript , вы можете увидеть его здесь .

Проще говоря ...

function luhn(array) {
  return function (number) {
    let len = number ? number.length : 0,
      bit = 1,
      sum = 0;

    while (len--) {
      sum += !(bit ^= 1) ? parseInt(number[len], 10) : array[number[len]];
    }
    return sum % 10 === 0 && sum > 0;
  };
}([0, 2, 4, 6, 8, 1, 3, 5, 7, 9]);

Обратите внимание, что связанный источник написан на ES6 языке (также известном как JavaScript 2015), но передается на ES5 (см. index.js ) и его полностью протестирован.

Кроме того, его можно использовать как в браузерах , так и / или node.js .

Тесты производительности и другая реализация находятся на jsperf , чтобы проверить его высокую производительность.

Теперь, если вы просто хотите использовать его, возьмите код из связанного репозитория .

В противном случае установите его через bower ...

bower install luhn-alg

Или через npm ...

npm install luhn-alg

Отказ от ответственности: я являюсь автором пакета luhn-alg.

1 голос
/ 26 января 2015

Формула Луна - самый популярный алгоритм проверки кредитных карт. И не стоит так бояться слова algorithm, что вы ищете библиотеку. Это невероятно легко понять. Из описания Википедии этот алгоритм можно разделить на 3 этапа:

  • Начиная с крайней правой цифры, которая является контрольной цифрой, двигаясь влево, удваивайте значение каждой второй цифры; если продукт этого операция удвоения больше 9 (например, 8 × 2 = 16), затем сложите цифры продуктов (например, 16: 1 + 6 = 7, 18: 1 + 8 = 9).
  • Возьмите сумму всех цифр.
  • Если сумма по модулю 10 равна 0 (если сумма заканчивается на нуле), то число действует согласно формуле Луна; иначе это не так действительный.

Вот мой рабочий проект.

function luhn(anum){
    anum = anum+'';
    var sum = 0,
        max = anum.length - 1;
    //From the rightmost digit, which is the check digit, moving left
    for(var j=max;j>=0;j--){
        var digit = parseInt(anum[j]);
        //Take the sum of all the digits
        if((max - j) & 1){
            //double the value of every second digit
            var add = digit * 2;
            //if the product of this doubling operation is greater than 9 ,
            //then sum the digits of the products
            sum += add < 10 ? add : 1 + add % 10;
        }else{
            sum += digit;
        }
    }
    //If the total modulo 10 is equal to 0 (if the total ends in zero)
    //then the number is valid according to the Luhn formula;else it is not valid.
    return sum % 10 === 0;
}

luhn(79927398713) -> true
1 голос
/ 18 августа 2010

Вы можете использовать эту функцию, если вы еще не используете плагин jQuery. Он основан на алгоритме Луна и допускает пробелы или тире, поэтому должен работать в большинстве случаев ввода данных, для которых он вам понадобится.

http://af -design.com / блог / 2010/08/18 / проверка-кредитных карты-номер /

...