私が造る Toolz.dev、その前に何年もかけて出荷した WordPress プラグインと Laravel API、そのいくつかは支払いを受けなければならなかった 私が今まで書いた最初のチェックアウトフォームは、すべての入力ミスのカード番号を支払いゲートウェイに直接送信し、それがバウンスするのを待ちました それは技術的にはうまくいきましたが、遅かったし、それは最初に有効になるはずのない番号のゲートウェイ要求を焼き尽くしました 修正は恥ずかしいほど小さかった: 送信する前にブラウザでLuhnチェックサムを実行します その1 つの変更がほとんどの誤字を即座にキャッチし、無意味なAPI呼び出しのストリームを停止しました このガイドは、そのチェック、その隣にあるプレフィックスルール、および クレジットカード Validator 私はあなたがメモリからどちらかを再実装する必要がないように構築しました。
tl;dr: クレジットカードバリデーターは、数字が構造的に正しいことを確認し、実際のアカウントに属しているのではない。 2つの独立したテストを実行します:ISO/IEC 7812-1のLuhnチェックサム、ほぼすべての1桁の誤字と隣接する転置をキャッチし、各ネットワークに対する長さと接頭辞のチェック& #39; sパブリッシュされた発行者の範囲。数字は一方に合格しても他方には失敗する可能性があるため、2つの結果は別々に報告されます。完全にブラウザで実行されるため、カード番号はアップロードされず、カードにお金がかかっているかどうかは発行者だけが知っています。
カード番号が有効とはどういう意味ですか?
支払いカード番号、正式にはプライマリアカウント番号またはPANは、桁のランダムな文字列ではありません その構造は、によって定義されます ISO/IEC 7812。 6 桁から8 桁は発行者識別番号、またはIINであり、以前は銀行識別番号(BIN)と呼ばれていた。それらの桁はネットワークと発行銀行を識別する。 2番目から最後までのその後の桁は個々の口座識別子であり、最後の1 桁はLuhnアルゴリズムで計算されたチェックディジットである。
だから "valid" には2 つの別々の意味があり、それらを区別するのに役立ちます。 1つ目は、その数字がルーンチェックサムに従うことです。つまり、チェックの桁は数字の残りの部分と一致します。 2つ目は、その数字が実際のカードネットワークに対して適切な長さと接頭辞を持つことです。数字は一方の条件を満たすことができ、もう一方の条件を満たすことはできません。 4111 1111 1111 1112 visa プレフィックスと Visa の長さがありますが、Luhn に失敗します。右のチェック ディジットでたまたま終わるランダムな 16 桁の文字列は、Luhn を通過しますが、ネットワークが所有していないプレフィックスで始まる場合があります。適切なバリデーターは、修正がそれぞれ異なるため、2 つのうちどちらが失敗したかを教えてくれます。
どちらのチェックもできないことは、カードが本物であることを伝えることです。構造的妥当性は、背後のアカウントの状態ではなく、番号の形状に関するものです。アカウントが存在しないか、凍結されているか、制限を超えているか、何年も前に閉鎖されている可能性があります。知っている唯一のシステムは発行銀行であり、ライブトランザクションでの承認リクエスト中に正確に 1 回応答します。ブラウザ側のバリデータが行うことはすべて、その時点に到達する前に実行される安価なプレフィルターです。
Luhnアルゴリズムはどのように機能しますか?
luhn アルゴリズムは mod-10 アルゴリズムとも呼ばれ、1960 年にIBMのハンス・ピーター・ルーンによって特許が取得され、現在はパブリックドメインとなっている。 checksum である。つまり、その目的はセキュリティを提供することではなく、偶発的なエラーを検出することにある。このように機能する。右端の桁から左に移動すると、2 桁ごとに 2 倍になる。 2 倍にすると 9 より大きい数値が得られる場合は、そこから 9 を引く(これは、その 2 桁を足し合わせるのと同じである)。そして、すべての桁、2 倍になった数値と手付かずの数値を合計する。合計が 10 で割り切れる場合、その数値は通過する。
こちらがチェックオンです 4111 1111 1111 1111、右から左に働く.右端の桁は位置1 で,2 倍にならない.2 桁ごとに2 倍すると1と2 のセットが得られ,2 倍の位置から来る2 は,それらをすべて足し合わせると合計が10 の倍数に着地するので,数は通過する.任意の1 桁を変更し,和はほとんどの場合10 の倍数ではなくなる,まさにこのチェックが役に立つものである.
Luhnの値は、それがキャッチするものにあります.それはすべての1 桁のエラーを検出します, 間違った入力された任意の1 桁を意味します.それはまた、2 つの隣接する桁のほぼすべての転置をキャッチします, クラシック " 私は12"の代わりに21 を入力しました; ミス, 1 つの既知の例外を除いて: それはのスワップをキャッチしません 09 あんど 90、なぜなら、両方が同じ重み付け和に写す。 それは本物の盲点であるが、それはまれなものであり、それはルーンが暗号学的保証ではなくチェックサムである理由である。 フォームの検証のために十分以上であり、それはそれが本質的にインターネット上のすべてのチェックアウトのカードフィールドの後ろに座っている理由です。
カードネットワークはどのように検出されますか?
ネットワークは先頭の桁である IIN から読み取られます 各ネットワークは特定のプレフィックス範囲を所有し ほとんども全長を制限します バリデータは最初に最も長く 最も具体的なプレフィックスにマッチします なぜならいくつかの範囲が重複しているからです チェックする範囲は次のとおりです:
| ネットワーク | から始まります | 有効な長さ | セキュリティコード |
|---|---|---|---|
| ビザ | 4です | 13、16、19 | 3つです |
| マスターカード | 51-55、2221-2720 | 16か | 3つです |
| アメリカン エキスプレス | 34、37 | 15 に記載しております | 4です |
| 発見する | 6011、65、644-649、622126-622925 | 16、19 | 3つです |
| ダイナーズ クラブ | 300-305、309、36、38-39 | 14、16、19 | 3つです |
| ジェーシービー | 3528-3589 さん | 16-19 さん | 3つです |
| 銀聯 | 62 に記載しております | 16-19 さん | 3つです |
| マエストロ | 50、56-69 (選択) | 12-19 さん | 3つです |
重なりは興味深い部分であり、それらを間違えることは、素朴な検出器がいかに失火するかということです。 Mastercardは、を追加しました 2221-2720 2017 年の範囲なので、それ以前に書かれた検出器はそれらのカードを不明として報告します。 discoverはの狭いスライスを所有しています 62 スペース 、 622126 スルー 622925、 の うち 銀聯 所有 残り 62、従ってそれらをテストする順序はa かどうかを決定する 6221 カードは Discover または UnionPay と読みます。バリデーターは、広範な UnionPay プレフィックスの前に特定の Discover ウィンドウをテストするため、両方が正しく着地します。 American Express は、通常の 4 つのグループではなく 4-6-5 にグループ化された 15 桁の数字を使用するため、フォーマット コードをトリップします。背面の 3 桁の CVV ではなく、4 桁のセキュリティ コード (表面に印刷された CID) を使用します。
クレジットカードバリデーターの使い方
ツールは意図的にシンプルです 数字を貼り付けて結果を読みます 送信ボタンも設定するものもありません。
ステップ1:番号を入力します
カード番号を入力するかフィールドに貼り付けます スペースとダッシュは無視されますので 4111-1111-1111-1111、 4111 1111 1111 1111、そして 4111111111111111 すべて同じように検証します。これは、実際の入力がスプレッドシートからコピーされるか、カードを読み取るか、テスト フィクスチャから引き出されるなど、あらゆる形式で届くため重要です。
ステップ2:評決を読む
結果の上部は数字が有効かどうかをわかりやすく示し、有効でない場合はその理由を名づけます。その下には、ルーンのチェックサムが合格したかどうか、長さが検出されたネットワークと一致するかどうかという 2 つのチェックが別々に表示されます。それらを区別することはポイントです。ルーンを通過するが長さに失敗した数字は、ほとんどの場合、数字が削除または追加されたことを意味しますが、ルーンに合格するが正しい長さを持つ数字は、通常、1 桁が単純に間違っていることを意味します。
ステップ3: 検出されたネットワークを確認します
ツールは、プレフィックスから識別したネットワーク、ネットワークが許可する長さ、セキュリティ コードがどのくらいの長さであるべきかを示します。これは、フォームを構築していて適切なカード ロゴを表示したい場合、または 3 桁または 4 桁の CVV を期待するかどうかを知る必要がある場合に、単独で役立ちます。
ステップ4: フォーマットされた番号またはマスクされた番号をコピーします
ネットワークが印刷する方法でグループ化された番号をコピーしたり、最後の 4 桁を除くすべての桁を隠すマスクされたバージョンをコピーしたりできます。完全な PAN を保存または表示することは、まさに人々をコンプライアンスで困らせるようなものであるため、マスクされたフォームはログ、スクリーンショット、サポート チケットに必要なものです。
検証はどこに当てはまりますか?また、どこで停止しますか?
正直なフレーミングはバリデータはゲートではなくフィルターであるということです明らかなゴミを安く拒否するプロセスの先頭に属し下流の何かの証明として決して信用されてはならないのですチェックアウトフォームではルーンクライアントサイドを実行するとユーザーが入力し終えた瞬間に誤字フラグが立てられます支払いが押される前にそれはより良い経験となりゲートウェイへの運命の往復を節約できますデータパイプラインではカード型のフィールドをバリデーションすると破損した行が窒息するシステムに到達する前にキャッチされますテストスイートでは検証に合格した番号が必要ですフォームが本番環境でそう振る舞うようにするため公開されているテスト番号はそのためのものです。
それがしないことは認可することであり、これは率直に言う価値があります 有効な番号はワーキングカードではありません ツールは残高を確認できず、アカウントが存在することを確認できず、どの銀行とも接続していません また、実際のアカウントに結び付けられた番号を生成することはできませんし、生成すべきではありません 提供するサンプル番号は、決済プロバイダーによって公開されている標準テスト値であり、Luhn 有効であり、開発者がフォームを行使できるようにネットワークチェックを正確にパスしますが、充電可能なものとはまったく関係ありません 実際の支払いに触れるものを構築している場合、カードを請求できるかどうかの実際の検証は決済プロセッサを介してサーバー側で行われ、カードデータ自体はトークン化されているため、独自のシステムが生のPANを保存することはできません。 クライアント側の検証は、保管庫ではなく、礼儀正しいフロントドアです。
これはサーバーでの検証とどのように比較されますか?
どちらも場所があり、異なる質問に答えます Luhnとプレフィックスチェックによるクライアント側の検証は即時かつプライベートで、ユーザーが送信する前にフィードバックを与え、コストは何もかかりません その限界は、構造についてしか知らないことです 支払いプロセッサを介したサーバー側の検証は、カードが本物で充電可能であることを確認できる唯一のものですが、ネットワークリクエストのコストがかかり、承認の試行ごとに費用がかかる可能性があり、ユーザーが送信を約束した後に発生します 賢明な設計は両方を使用します: ブラウザは無料で誤字と形状エラーをキャッチし、サーバーはユーザーが支払うときに重要な1 つのチェックを行います クライアントチェックをスキップすると、フォームが遅いと感じます; サーバーチェックをスキップすると、実際には何も検証していないことを意味します この種の作業用のより広範なキットを組み立てている場合、 開発者の生産性向上ツール ラウンドアップは、それと並行して存在する傾向にある他のユーティリティをカバーします。
関連ツールとさらなる読書
カードバリデータが単独で移動することはめったにありません フォームやデータパイプラインを硬化しているときは、通常、識別子を生成したり、値をハッシュしたり、他の種類の入力をチェックしたりすることもあります ハッシュジェネレータ 値の形状を検証するのではなく、値をフィンガープリントする必要がある場合に到達するものは次のとおりです パスワード強度チェッカー 同じ " をブラウザで測定し、どこにも送信しないでください。 " 原則資格情報にネットワーク側では、 IPサブネット計算機 チェックアウトが実行されるインフラストラクチャを構築する人にとって、コンパニオン ツールです。
より広い文脈では、 データのプライバシーとオンライン ツール ガイドでは、クライアント側で機密チェックを実行することが重要である理由について説明します コーディング ツール ガイド バリデータを開発者& #39; s デイリー キットの残りのコンテキストに置きます。 Toolz.dev 上のすべてがブラウザで実行されます。これが、カード番号を安全に貼り付ける理由のすべてです。デバイスから離れることはありません。
よくある質問
Luhnアルゴリズムは何をチェックしますか?
ルーン アルゴリズムは、数値が入力ミスされていないことを確認する mod-10 チェックサムです。右から 2 桁ごとに 2 倍になり、9 を超える結果から 9 を減算し、すべての桁を合計し、合計が 10 で割り切れることを確認します。 1 桁のエラーと隣接する 2 桁のほぼすべてのスワップをキャッチしますが、これはチェックサムであり、セキュリティ機能ではなく、カードが本物であることを証明することはできません。
有効な番号はカードが機能することを意味しますか?
いいえ 有効な数字は数字が構造的に正しいことを意味するだけなので、チェックサムは通過し、長さはネットワークに一致します アカウントが存在するかどうか、残高があるかどうか、またはまだアクティブであるかどうかは、実際の承認中にカード発行者によってのみ確認できます 構造的有効性はプレフィルターであり、使用可能なカードの証明ではありません。
数字からカードのブランドはどのように検出されますか?
ブランドは最初の数字である発行者識別番号から読み取られます。 「Visa」は4 で始まり、「Mastercard」は51-55 または2221-2720 で始まり、「American Express」は34 または37 で始まり、各ネットワークは特定の合計長のみを許可するため、バリデーターはプレフィックスと長さを一緒にチェックし、一致したネットワークを報告します。
このツールにカード番号を入力しても安全ですか?
はい。 number はブラウザーで完全に処理され、アップロード、ログ記録、送信されることはありません。 validator は接続なしで動作し続けるため、インターネットから切断することでこれを確認できます。 とはいえ、不要な場所に実際のカード番号を貼り付けることは避け、開発には公開されたテスト番号を優先する必要があります。
なぜ私の本当のカードはLuhnを通過しますが、長さのチェックに失敗しますか?
これは通常、入力中に桁がドロップまたは追加されたことを意味します。 Luhn チェックサムは、間違った長さの数字を偶然に通過する可能性があるため、ツールは、検出されたネットワークに対して長さを独立してチェックします。完全な数字を再入力すると、両方のチェックが一緒に通過する必要があります。
テストカード番号とは何ですか?なぜ存在するのですか?
などのテストカード番号 4111 1111 1111 1111 開発者がチェックアウトフォームを行使できるように、決済プロバイダーによって公開されています。これらは Luhn 有効であり、ネットワークチェックに合格しているため、フォームは本番環境と同じように動作しますが、実際のアカウントにはマップされず、決して請求することはできません。実際のカードを入力したくなるような場所で使用するのが正しいものです。
CVVとカード番号の違いは何ですか?
カード番号は、アカウントを識別する長いプライマリアカウント番号です。 CVV、CVC、またはCIDは、番号とは別に印刷された、ほとんどのネットワークの3 桁とAmerican Expressの4 桁の短いセキュリティコードです。 このツールは、カード番号のみを検証します; これは、トランザクション中に発行者によって検証されるセキュリティコードをチェックしません。
このバリデータは、動作するクレジットカードを生成できますか?
いいえ 入力した数字のみをチェックし、ライブアカウントに紐付けられた数字を生成する方法はありません 提供するサンプル番号は、実際のアカウントに到達しない標準の公開テスト値です 実際のカードの数字を生成することは、構造検証者ができることではなく、このツールが試みるものではありません。



