クレジットカード番号生成ツールは、決済フォームの検証に使う番号を、発行組織ごとの規則と検査用の数字がそろった形で作り出す仕組みです。番号は数字が並んでいるだけに見えますが、先頭の数桁が発行組織を示し、最後の一桁が入力の誤りを検出するために計算されています。この二つを知らずに作った値は、桁数は合っていても検証で落ちます。ここでは、テスト用の番号と本物の番号の違い、先頭の桁の意味、検査用の数字の役割、カード検証番号と有効期限をそろえる理由、決済事業者が公開しているテスト用の値、そして扱ってよい範囲を順に確認します。読み終えると、決済フォームの検証で用意すべき値と、触れてはいけない範囲がはっきりします。
テスト用の番号と本物の番号は何が違うのか
テスト用の番号は、規則に従って計算された値であり、どの発行会社の台帳にも登録されていません。形式と検査用の数字が本物と同じでも、照会すれば存在しない値です。したがって、決済の処理を通すことはできず、本物の取引を生み出すこともありません。
本物の番号は、発行会社が特定の口座に対して発行した値です。桁の並びが同じ規則に従っていても、台帳に載っているかどうかが決定的な違いになります。テストの目的は、フォームが受け取れるかどうかを確かめることであり、取引を成立させることではありません。この区別を最初に固定しておくと、後続の判断がぶれません。
もう一つの違いは、取り扱いの要件です。本物の番号は、たとえテスト環境であっても、そのまま保存したり表示したりしてはいけません。テスト用の番号にはこの制約がありません。この非対称性が、テスト環境で本物の値を使わない最大の理由です。
先頭の桁は何を表しているのか?
番号の先頭にある数桁は、発行組織を識別するための符号です。一般的には発行会社の識別番号と呼ばれ、そのうしろに発行会社が自由に使える桁が続きます。どの組織がどの範囲の符号を使うかは国際的な取り決めで定められており、先頭の桁を見ればおおよその組織が分かります。
この仕組みがあるため、検証の実装は先頭の桁で分岐します。ある組織の番号として妥当な桁数と、別の組織の桁数は同じではありません。桁数だけを数える検証は、組織の範囲を無視するため、本来弾くべき値を通します。逆に、一つの組織の規則だけを実装すると、他の組織の番号をすべて弾きます。
テストの値は、組織ごとに少なくとも一件ずつ用意してください。同じ会社の別の符号、たとえば同じ組織でも桁数の違う値を混ぜると、分岐の抜けが見つかります。組織ごとの形式の違いはカード番号の形式で扱っています。
検査用の数字は何のためにあるのか
番号の末尾の一桁は、それより前の桁から計算されます。計算の方法は、桁を一つおきに二倍し、二桁になった値を桁ごとに足し戻し、全体の合計がある数の倍数になるように最後の一桁を決める、という手順です。この一桁があることで、入力の途中で数字を一つ間違えたり、隣り合う二つの数字を入れ替えたりした誤りを、高い確率で検出できます。
ここで重要なのは、この計算が誤りの検出を目的としており、値の正当性を保証するものではない点です。計算を通る値は無数にあり、そのほとんどは実在しません。計算が通ったからといって有効な番号だと判断するのは誤りです。実装でも、計算の通過は形式の確認にとどめ、それ以上の意味を持たせないでください。
検査用の数字を含めて作るかどうかは、テストの目的で決まります。検証の通過を試すなら、計算に合う値が必要です。逆に、誤った値を受け取るかどうかを試すなら、計算に合わない値を作る必要があります。両方の値を使い分けることが、検証の網羅につながります。計算の詳細は検査用の数字の仕組みにまとめています。
検証番号と有効期限をそろえる必要はあるのか?
カード検証番号は、カードの裏面または表面に印字される短い数字で、番号そのものからは計算できません。したがって、生成した番号に対して妥当な検証番号というものは存在せず、桁数と位置の規則だけが決まります。組織によって桁数が異なるため、実装は番号の先頭を見て期待する桁数を切り替える必要があります。
有効期限は、過去の日付か将来の日付かで挙動が変わります。期限切れの値を入れたときにフォームが正しく拒否するかは、必ず確認すべき項目です。有効期限の検証は、月の範囲、年の範囲、現在との比較という三つの段階に分かれます。現在との比較では、実行の時刻によって結果が変わるため、境界の値を使って確かめます。
この二つと番号を組み合わせて、一つの記録として扱うことが大切です。番号はある組織のものなのに、検証番号が別の組織の桁数になっている値は、単体の検証を通ります。記録としての整合を保つには、組織を先に決め、そこから番号、検証番号、有効期限を導く順序にします。記録の整合という考え方は身元データの項目の整合にも通じます。
決済事業者が公開している値はどう使うのか
主要な決済事業者は、検証用の番号を文書で公開しています。公開されている値は、その事業者の環境で特定の結果を返すように設定されており、成功、拒否、追加の認証といった分岐を試せます。自前で作った値では再現できない挙動を確かめられる点で、公開の値には代えがたい利点があります。
一方で、公開の値は事業者ごとに異なります。ある事業者で成功する値が、別の事業者でも成功するとは限りません。複数の事業者を併用しているなら、それぞれの文書を確認し、どの値が何を試すためのものかを一覧にしておきます。取り違えると、成功を期待した検証が拒否で終わります。
公開の値は、あくまでその事業者の環境に閉じたものです。本番の環境で試すと、取り消しの手間が生じます。使用の範囲を環境ごとに分け、公開の値を使う場所を限定してください。事業者ごとの違いは決済事業者のテスト用カードで扱っています。
テスト環境でも避けるべきことは何か
カード情報の取り扱いには国際的な基準があり、その基準はテスト環境を除外していません。本物の番号をテストの値として使うと、たとえ実際の取引を行わなくても、基準が求める保護の対象になります。保存の範囲、表示の際の伏せ字、アクセスできる人の制限が、そのまま適用されます。
厄介なのは、テスト環境が本番ほど厳しく守られていないことが多い点です。小さな検証用の環境に本物の番号を持ち込むと、保護の水準が下がり、漏えいの経路が増えます。開発の途中で使った値が、記録や資料に残り、後から回収できなくなる例は珍しくありません。
したがって、テスト環境で使う値は、最初から本物ではない値に限ります。生成した番号、事業者が公開している値、どちらも台帳に存在しない値です。この原則を徹底すれば、基準への対応も、漏えい時の被害も、扱いやすい範囲に収まります。基準の考え方はテスト環境とカード情報の基準で整理しています。
決済フォームの検証では何を見るのか
まず、入力の途中の扱いを見ます。数字以外の文字を打ったときに拒否するか、無視して受け入れるかは実装ごとに違い、どちらでも構いませんが、方針が一貫している必要があります。空白や区切り記号を自動で除く実装は、貼り付けの操作で特に差が出ます。
次に、桁数の途中の状態を試します。短すぎる値、長すぎる値、組織ごとの桁数から一つずれた値を入れ、それぞれが正しく扱われるかを見ます。検査用の数字が合わない値も、この段階で試します。エラーの文面が具体的であるほど、利用者は次に何をすべきかを判断できます。
最後に、送信の前後を通して確認します。検証の失敗が入力欄の近くに表示されるか、失敗のあとも入力内容が保たれるか、成功のあとに保存される値から番号が除外されているかを見ます。フォームの確認項目は決済フォームの検証項目にまとめています。
生成の件数を増やすと何が見えてくるのか
一件ずつ確認していると気づかない問題は、件数を増やすと現れます。同じ組織の値ばかりを大量に作り、他の組織の値が一件もない一覧は、分岐の抜けを隠します。まず組織ごとの件数を数え、偏りがないかを確かめてください。次に、桁数の分布を見ます。ある桁数だけが並んでいれば、短い値と長い値の扱いを試せていません。
検査用の数字についても、合う値と合わない値の比を意識してください。合う値ばかりを作ると、誤った値を拒否できるかが分かりません。逆に合わない値ばかりでは、正常な入力が通るかを試せません。用途ごとに一覧を分けておくと、どちらの検証にどちらを使うかが迷いません。
一覧を保管するときは、値そのものより先に、値の作り方を記録します。どの組織を、どの桁数で、検査用の数字を合わせて作ったかが分かれば、同じ一覧を後から作り直せます。値そのものを残す必要が薄くなれば、保管の対象も減ります。
検証の順序はどう組むべきか
フォームの検証は、桁数、文字種、検査用の数字、組織ごとの範囲という順に重ねます。この順序には理由があります。桁数と文字種は安く判定でき、組織の範囲の確認は一覧の参照を伴うためです。安い判定を先に置けば、明らかに誤った値で高い判定を呼ばずに済みます。
ただし、エラーの文面は順序とは別に考えてください。利用者にとって最も役に立つ情報は、どの段階で落ちたかではなく、次に何を直せばよいかです。桁数が足りないのか、組織の範囲から外れているのかを切り分けて伝えると、入力のやり直しが一回で済みます。
検証の結果を記録するときは、番号そのものを残さず、落ちた段階だけを残す形が安全です。値は再現のための鍵として扱い、記録には残さない、という方針を先に決めておいてください。
導入の前に決めておきたいこと
まず、テスト環境で本物の番号を使わない方針を、文章として決めておきます。次に、組織ごとの記録を用意し、番号、検証番号、有効期限をその記録から導く順序にします。最後に、検査用の数字が合う値と合わない値の両方を、用途ごとに分けて用意します。ここまで整えてから、カード番号生成ツールで組織と桁数を選び、生成した値で決済フォームの検証を始めてください。