2015-03-23 6 views
1

Как я могу проверить кредитную/дебетовую карту с помощью jquery/javascript?Подтвердить кредитную карту с помощью jquery

Я попытался использовать алгоритм Луна.

function checkLuhn(input) { 
 
var sum = 0; 
 
var numdigits = input.length; 
 
var parity = numdigits % 2; 
 

 
for(var i=0; i < numdigits; i++) { 
 
    var digit = parseInt(input.charAt(i)) 
 
    if(i % 2 == parity) digit *= 2; 
 
    if(digit > 9) 
 
     digit -= 9; 
 
    sum += digit; 
 
} 
 
return (sum % 10) == 0; 
 

 
}

У вас есть хороший/простой способ сделать это?

Заранее спасибо

+0

Вместо этого вы можете использовать регулярное выражение. – saadq

+0

http://stackoverflow.com/questions/13921456/jquery-validator-credit-card-number-type-match - это то, что вам нужно. – user86745458

+1

Существование плагина jQuery для этого: [jQuery Credit Card Validator] (http://jquerycreditcardvalidator.com) – Teo

ответ

0

Вы можете запретить пользователь набрав неверное значение, в первой очереди с помощью jQuery Mask Plugin

$('#debit').mask('0000 0000 0000 0000');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://igorescobar.github.io/jQuery-Mask-Plugin/js/jquery.mask.min.js"></script> 
 

 
<input type="text" id="debit">

0

Это, как я сделал это с Лунами-алгоритмом и номером карты (мы поддерживаем только конкретные карточки, которые имеют 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), иначе он проверяет полное число, которое вы добавляете в свою форму.

+0

Но я думаю, это гораздо лучший ответ, http://stackoverflow.com/questions/72768/how-do -вы-детектировать-кредитные карты типа, ориентированные на номер – KungWaz

Смежные вопросы