信用卡的客户端验证



在用户点击Submit之前,是否有人拥有库或JavaScript片段来验证信用卡的校验位?

jQuery验证插件有一个验证信用卡号的方法。

还有其他特定的脚本:

  • 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

最新更新