Есть ли у кого-нибудь библиотека или фрагмент кода JavaScript для проверки контрольной цифры кредитных карт до того, как пользователь нажимает "Отправить"?
Клиентская проверка кредитных карт
Ответ 1
jQuery Validation Plugin имеет method для проверки номеров кредитных карт.
Существуют и другие специальные скрипты:
Большинство из них использует алгоритм Luhn.
Ответ 2
Вероятно, OP больше не подходит к этой теме, но это может быть полезно для кого-то еще:
http://jquerycreditcardvalidator.com
Он проверяет тип карты, проверяет ее длину и проверяет mod 10 с алгоритмом Луна.
Ответ 3
Вы можете использовать этот фрагмент для проверки номеров карт на 16 цифр с помощью алгоритма Luhn:
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;
}
Ответ 4
Алгоритм Луна (также известный как формула Луна) полезен для проверки множества идентификационных номеров (например, номеров кредитных карт, 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
.
Ответ 5
Вы можете использовать эту функцию, если вы еще не используете плагин jQuery. Он основан на алгоритме Луна и толерантен к пробелам или тире, поэтому он должен работать для большинства случаев ввода данных, в которых вы нуждаетесь.
http://af-design.com/blog/2010/08/18/validating-credit-card-numbers/
Ответ 6
Формула Луна - самый популярный алгоритм проверки валидации кредитной карты. И не бойтесь слова algorithm
, что вы ищете библиотеку. Это невероятно легко понять. Из описания Википедии этот алгоритм можно разделить на три этапа:
- Из самой правой цифры, которая является контрольной цифрой, перемещается влево, удваивает значение каждой второй цифры; если продукт этого операция удвоения больше 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