我有一个输入,用于使用luhn算法验证我的信用卡。 Luhn功能完成了他的工作,并成功验证了我的信用卡号码。
但是我想将用户的输入类型格式化为6703 0000 0000 0000 0(最多17位)。我有一个脚本,但问题是当我执行Luhn功能时,所有信用卡都无效,因为它读取信用卡为6703(SPACE)0000(SPACE)0000(SPACE)0000(SPACE)0 。这是一个非常令人沮丧的问题。我找不到任何解决方法。
我是否需要更改格式化数字的功能?或者我是否需要更改luhn函数的脚本?
输入类型:
<input type="text" name="credit-card-number" id="credit-card" placeholder="Enter your credit card number here" autocorrect="off" oninput="myFunction()" autocapitalize="off" maxlength="42" size="42" ng-maxlength="17" required="required" />
cc格式:
function cc_format(value) {
var v = value.replace(/\s+/g, '').replace(/[^0-9]/gi, '')
var matches = v.match(/\d{4,17}/g);
var match = matches && matches[0] || ''
var parts = []
for (i = 0, len = match.length; i < len; i += 4) {
parts.push(match.substring(i, i + 4))
}
if (parts.length) {
return parts.join(' ')
} else {
return value
}
}
onload = function() {
document.getElementById('credit-card').oninput = function() {
this.value = cc_format(this.value)
}
}
Luhn功能:
$(document).ready(function() {
$('#credit-card-entry-form').submit(function(e) {
e.preventDefault();
var creditCardNumber = $('input[name="credit-card-number"]').val();
is_luhn_valid(creditCardNumber);
});
});
//validate checker
var luhnChk = (function(arr) {
return function(ccNum) {
var
len = ccNum.length,
bit = 1,
sum = 0,
val;
while (len) {
val = parseInt(ccNum.charAt(--len), 10);
sum += (bit ^= 1) ? arr[val] : val;
}
return sum && sum % 10 === 0;
};
}([0, 2, 4, 6, 8, 1, 3, 5, 7, 9]));
function is_luhn_valid(cardNumber) {
if (luhnChk(cardNumber) === true) {
$('#err').hide();
$('#suc').show();
document.getElementById("credit-card").style.borderColor = '#00a160';
alert("Credit card number is valid.");
} else {
$('#err').show();
$('#suc').hide();
document.getElementById("credit-card").style.borderColor = '#FF6C60';
alert("Credit card number is invalid.");
}
}
答案 0 :(得分:1)
请使用以下行删除字符串中包含信用卡号的所有空格:
str = creditCardNumber.replace(/\s/g, '');