使用jquery验证信用卡

时间:2015-03-23 12:19:57

标签: javascript jquery html

如何使用jquery / javascript验证信用卡/借记卡?

我尝试使用Luhn算法。



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;

}
&#13;
&#13;
&#13;

你有什么好/更简单的方法吗?

提前致谢

2 个答案:

答案 0 :(得分: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">

答案 1 :(得分:0)

这是我使用Luhn算法和卡号长度的方式(我们只支持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),否则检查您以自己的形式添加的全长号码。