2008-11-01 72 views
10

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

+0

为什么你会想用JavaScript来验证信用卡信息? – 2008-11-01 03:16:58

回答

10

大概OP甚至不遵循这个线程了,但是这可能是别人有帮助的:

http://jquerycreditcardvalidator.com

它检查卡类型,验证其对mod长度和检查10用Luhn算法。

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; 
} 
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 
3

Luhn算法(也称为Luhn formula)是有用的,以验证各种识别号码(例如信用卡号码IMEI)的。

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

简而言之...

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语言(也称为JavaScript的2015年),但在被transpiled ES5(见index.js),它是完全单元测试。

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

基准测试和其他实施在jsperf验证其高性能。

现在,如果您只是想使用它从链接repository抓住代码。

否则,它通过bower安装...

bower install luhn-alg 

或通过npm ...

npm install luhn-alg 

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