Это, как я сделал это с Лунами-алгоритмом и номером карты (мы поддерживаем только конкретные карточки, которые имеют 16 цифр):
// Luhn-algorithm check
function checkCardNumber(number) {
var sumTable = [
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[0, 2, 4, 6, 8, 1, 3, 5, 7, 9]
],
sum = 0,
flip = 0,
i;
for (i = number.length - 1; i >= 0; i--) {
sum += sumTable[flip++ & 0x1][parseInt(number.charAt(i), 10)];
}
return sum % 10 === 0;
}
// Check if the VISA card input is valid
var regCardNo = (opts.cardData ? /^[0-9]{6}[\*]{6}[0-9]{4}$/ : /^[0-9]{16}$/),
regMonth = /^[0]{1}[1-9]{1}$|^[1]{1}[0-2]{1}$/,
regYear = /^[0]{1}[1-9]{1}$|^[1-9]{1}[0-9]{1}$/,
regCvc = /^[0-9]{3}$/,
cardNo = cardNumberInput.val(),
month = monthInput.val(),
year = yearInput.val(),
cvc = cvcInput.val();
if(regCardNo.test(cardNo) && regMonth.test(month) && regYear.test(year) && regCvc.test(cvc) && checkCardNumber(cardNo)) {
payButton.prop("disabled", false);
return true;
} else {
payButton.prop("disabled", true);
return false;
}
Все входные переменные JQuery elems (они не определены в этом фрагменте кода)
Обратите внимание, что проверка opts.cardData, если у вас есть номер укажи карты (который будет загружаться из БД), то он проверяет замаскированное число (например, 123456 ****** 1234), иначе он проверяет полное число, которое вы добавляете в свою форму.
Вместо этого вы можете использовать регулярное выражение. – saadq
http://stackoverflow.com/questions/13921456/jquery-validator-credit-card-number-type-match - это то, что вам нужно. – user86745458
Существование плагина jQuery для этого: [jQuery Credit Card Validator] (http://jquerycreditcardvalidator.com) – Teo