Проверка кредитных карт на стороне клиента
Есть ли у кого-нибудь библиотека или фрагмент JavaScript для проверки контрольной цифры кредитных карт до того, как пользователь нажмет кнопку Отправить?
6 ответов
Плагин проверки jQuery имеет метод проверки номеров кредитных карт.
Есть и другие специфические скрипты:
Большинство из них используют алгоритм Луна.
Возможно, OP больше не следует этой теме, но это может быть полезно для кого-то еще:
http://jquerycreditcardvalidator.com/
Он проверяет тип карты, проверяет ее длину и проверяет мод 10 с помощью алгоритма Луна.
Вы можете использовать этот фрагмент для проверки 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;
}
Алгоритм Луна (также известный как формула Луна) полезен для проверки различных идентификационных номеров (например, номеров кредитных карт, 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 install luhn-alg
Или через нпм...
npm install luhn-alg
Отказ от ответственности: я являюсь автором luhn-alg
пакет.
Вы можете использовать эту функцию, если вы еще не используете плагин jQuery. Он основан на алгоритме Луна и допускает пробелы и тире, поэтому должен работать в большинстве случаев ввода данных, для которых он вам понадобится.
http://af-design.com/blog/2010/08/18/validating-credit-card-numbers/
Формула Луна - самый популярный алгоритм проверки кредитных карт. И не бойся этого слова 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