客户端信用卡验证

时间:2008-11-01 02:58:27

标签: javascript validation luhn

在用户点击提交之前,是否有人有图书馆或JavaScript代码段来验证信用卡的校验位?

6 个答案:

答案 0 :(得分:20)

jQuery Validation Plugin有一个method用于验证信用卡号。

还有其他特定的脚本:

他们中的大多数使用Luhn algorithm

答案 1 :(得分:10)

可能OP甚至不再遵循这个帖子了,但这可能对其他人有帮助:

http://jquerycreditcardvalidator.com

检查卡片类型,验证其长度并使用Luhn算法检查mod 10.

答案 2 :(得分:7)

您可以使用此代码段通过Luhn algorithm验证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;
}

答案 3 :(得分:3)

Luhn算法(也称为Luhn formula)可用于验证各种识别号码(例如信用卡号 IMEI )。

我省略了对算法的解释,因为它已经被其他人公开,但如果你需要最快的Javascript实现,你可以看到它here

简单地说......

System.Windows.Data Error: 40 : BindingExpression path error: 'Url' property not found on 'object' ''ComboBoxItem' (Name='')'. BindingExpression:Path=Url; DataItem='ComboBoxItem' (Name=''); target element is 'ComboBox' (Name=''); target property is 'NoTarget' (type 'Object')

请注意,链接的源代码采用 ES6 语言(也称为JavaScript 2015),但在 ES5 (请参阅index.js)中进行了转换,并且完全是单元测试。

此外,它可用于浏览器和/或 node.js

基准和其他实施正在jsperf以验证其高性能。

现在,如果您只是想使用它,请从链接的repository中获取代码。

否则通过bower ...

安装
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]);

或通过npm ...

bower install luhn-alg

免责声明:我是npm install luhn-alg 包的作者。

答案 4 :(得分:1)

如果您还没有使用jQuery插件,可以使用此功能。它基于Luhn算法,并且可以容忍空格或破折号,因此适用于您需要的大多数数据输入情况。

http://af-design.com/blog/2010/08/18/validating-credit-card-numbers/

答案 5 :(得分:1)

Luhn formula是信用卡验证中最受欢迎的算法。并且不要害怕你正在寻找图书馆的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