在用户点击Submit之前,是否有人拥有库或JavaScript片段来验证信用卡的校验位?
还有其他特定的脚本:
- JavaScript信用卡验证功能
- 信用卡验证
他们中的大多数人使用Luhn算法。
可能OP甚至不再关注这个线程,但这可能对其他人有帮助:
http://jquerycreditcardvalidator.com
它检查卡片类型,验证其长度,并使用Luhn算法检查mod 10。
您可以使用此片段使用Luhn算法验证16位卡号:
function validateCardNumber(number) {
var regex = new RegExp("^[0-9]{16}$");
if (!regex.test(number))
return false;
return luhnCheck(number);
}
function luhnCheck(val) {
var sum = 0;
for (var i = 0; i < val.length; i++) {
var intVal = parseInt(val.substr(i, 1));
if (i % 2 == 0) {
intVal *= 2;
if (intVal > 9) {
intVal = 1 + (intVal % 10);
}
}
sum += intVal;
}
return (sum % 10) == 0;
}
Luhn算法(也称为Luhn公式)可用于验证各种身份号码(例如信用卡号、IMEI)。
我省略了对算法的解释,因为它已经被其他人公开了,但如果您需要最快的Javascript实现,您可以在这里看到它。
简单地说。。。
function luhn(array) {
return function (number) {
let len = number ? number.length : 0,
bit = 1,
sum = 0;
while (len--) {
sum += !(bit ^= 1) ? parseInt(number[len], 10) : array[number[len]];
}
return sum % 10 === 0 && sum > 0;
};
}([0, 2, 4, 6, 8, 1, 3, 5, 7, 9]);
请注意,链接的源代码使用ES6语言(也称为JavaScript2015),但使用ES5进行转换(请参阅index.js),并且经过了完整的单元测试。
此外,它在浏览器和/或node.js中都可用。
jsperf上有基准测试和其他实现,以验证其高性能。
现在,如果您只是想使用它,请从链接的存储库中获取代码。
否则通过bower安装。。。
bower install luhn-alg
或者通过npm。。。
npm install luhn-alg
免责声明:我是luhn-alg
软件包的作者。
如果您还没有使用jQuery插件,则可以使用此函数。它基于Luhn算法,可以容忍空格或破折号,因此应该适用于大多数需要它的数据输入情况。
http://af-design.com/blog/2010/08/18/validating-credit-card-numbers/
Luhn公式是信用卡验证中最流行的算法。不要害怕algorithm
这个词,因为你正在寻找一个图书馆。它非常容易理解。根据维基百科的描述,该算法可以分为3个步骤:
- 从最右边的数字开始,即校验数字,向左移动,每两位数字的值增加一倍;如果加倍运算大于9(例如,8×2=16),则求和乘积的数字(例如,16:1+6=7,18:1+8=9)
- 取所有数字的和
- 如果模10的总和等于0(如果总和以零结束),则根据Luhn公式,该数字是有效的;否则就不是了有效
这是我的工作底稿。
function luhn(anum){
anum = anum+'';
var sum = 0,
max = anum.length - 1;
//From the rightmost digit, which is the check digit, moving left
for(var j=max;j>=0;j--){
var digit = parseInt(anum[j]);
//Take the sum of all the digits
if((max - j) & 1){
//double the value of every second digit
var add = digit * 2;
//if the product of this doubling operation is greater than 9 ,
//then sum the digits of the products
sum += add < 10 ? add : 1 + add % 10;
}else{
sum += digit;
}
}
//If the total modulo 10 is equal to 0 (if the total ends in zero)
//then the number is valid according to the Luhn formula;else it is not valid.
return sum % 10 === 0;
}
luhn(79927398713) -> true