Sim*_*ver 11 jquery credit-card jquery-validate
我们都知道42是一切的答案,但对我来说这是一个有效的信用卡号码.
尝试在此jQuery Validation测试页面中输入"42"或"42176" ,然后单击"确定".
这是怎么回事?我认为这应该是事实上的验证库.即使微软现在正在使用它,但它认为'42'和'42176'是有效的信用卡号码?!它甚至没有进行长度检查.当然,我也不负责增加长度检查?它被称为'信用卡'验证器,而不是'luhn'验证器.
编辑:搭便车幽默 - 我将如何修补验证插件来检查长度.那很容易吗?
mjv*_*mjv 12
这可能是因为该验证器仅检查所提供的数量是否满足LUHN-10算法(其中42满足,因为4*2 + 2 = 10,其为0模10).
一个更好的验证器应该可以检查最小数量的数字.
我不确定这是否与jQuery的最新代码相对应,但我发现与信用卡验证相关的代码段:
// http://docs.jquery.com/Plugins/Validation/Methods/creditcard
// based on http://en.wikipedia.org/wiki/Luhn
creditcard: function(value, element) {
if ( this.optional(element) )
return "dependency-mismatch";
// accept only digits and dashes
if (/[^0-9-]+/.test(value))
return false;
var nCheck = 0,
nDigit = 0,
bEven = false;
value = value.replace(/\D/g, "");
for (n = value.length - 1; n >= 0; n--) {
var cDigit = value.charAt(n);
var nDigit = parseInt(cDigit, 10);
if (bEven) {
if ((nDigit *= 2) > 9)
nDigit -= 9;
}
nCheck += nDigit;
bEven = !bEven;
}
return (nCheck % 10) == 0;
},
Run Code Online (Sandbox Code Playgroud)
......正如你所看到的那样,只检查所有字符是否为数字并且LUHN-10是否满足,而没有注意到最小长度.
您可以将信用卡规则与最小和最大长度规则结合使用,以达到您的目的.这可能看起来太费劲了 - 我可能会同意 - 尽管如果你只想接受某些卡号,它会给你更多的控制权.
$('form').validate({
'#ccNum': {
creditcard: true,
required: true,
minlength: 13,
maxlength: 19
}
});
Run Code Online (Sandbox Code Playgroud)
信用卡号码的长度可以根据发行者的不同而有所不同(尽管如此,通常最小长度为~13位).但是,由于这是客户端验证,因此重点可能在于减少小错字的可能性,而不是检查任意数据.这可能应该在服务器端完成.