ユーザーが[送信]をクリックする前にクレジットカードのチェックディジットを検証するためのライブラリまたはJavaScriptスニペットを持っている人はいますか?
6 に答える
jQuery Validation Pluginには、クレジット カード番号を検証するメソッドがあります。
他にも特定のスクリプトがあります。
それらのほとんどは、Luhn アルゴリズムを使用します。
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言語 (JavaScript 2015 とも呼ばれます) ですが、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 つのステップに分けることができます。
- チェック ディジットである右端の数字から、左に移動して、2 桁ごとに値を 2 倍にします。この倍加演算の積が 9 より大きい場合 (例: 8 × 2 = 16)、積の桁を合計します (例: 16: 1 + 6 = 7、18: 1 + 8 = 9)。
- すべての桁の合計を取ります。
- 合計モジュロ 10 が 0 に等しい場合 (合計が 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