2008-11-01 96 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包的作者。