クレジットカード番号は、無作為に並んだ数字の塊ではありません。先頭の数桁が発行主体の範囲を示し、中央が口座の識別に使われ、最後の 1 桁が入力ミスを検出するために計算されています。この記事では、番号がどのような部分に分かれているのか、なぜ 16 桁以外の番号も存在するのか、そして受け取った番号をどう読めばよいのかを説明します。
番号を 3 つの部分に分けて眺める
どの番号も、役割の異なる 3 つの部分が連結されたものとして読めます。この見方を覚えると、初めて見る番号でもどのあたりを見ればよいかが分かります。
- 発行主体を示す接頭辞 — 先頭の数桁で、どの国際ブランドの、どの発行会社の範囲にあたるかを表します。以前は BIN と呼ばれ、現在は発行識別番号という呼び方が使われます。8 桁の長い形も存在します。
- 口座を示す部分 — 発行会社が割り当てる領域で、同じ範囲の中で重複しないことだけが求められます。ここに規則性はありません。
- 末尾のチェックディジット — それより前の桁から計算される 1 桁で、入力ミスの検出だけを目的としています。
三つ目の部分は番号の一部でありながら、口座の識別には一切寄与しません。この点を押さえておくと、桁数の数え方を誤らなくなります。
桁数がブランドごとに違うのはなぜですか?
世間では 16 桁という印象が強くありますが、これは一例にすぎません。国際規格では番号全体の上限が 19 桁と定められており、実際に流通している番号には 13 桁、14 桁、15 桁、16 桁といった長さがあります。ブランドごとに採用する長さが異なるのは、歴史的な経緯と、そのブランドが扱う想定件数の違いによります。
桁数が違っても、先頭の接頭辞を見ればどのブランドの番号かを判別できます。したがって、番号の妥当性を確認するときは、まず長さの許容範囲を広く取ってから、接頭辞ごとの規則を当てる順序が適切です。16 桁だけを正解としてしまうと、実在する番号を誤って拒否することになります。
先頭の数字が示すおおまかな種類
先頭の 1 桁は、業種を示す区分として割り当てられています。公開された番号計画であり、秘密の情報ではありません。
| 先頭の数字 | 主な区分 |
|---|---|
| 4 | Visa |
| 5、2 | Mastercard |
| 3 | 旅行・娯楽系(American Express、Diners Club、JCB など) |
| 6 | Discover、UnionPay |
| 1 | 航空関連 |
| 7 | 石油関連 |
| 8 | 通信関連 |
| 9 | 各国への割り当て |
この区分はあくまで大まかな分類であり、個々の番号がどの会社のものかを断定するものではありません。実際の帰属は、より長い接頭辞の範囲まで見て初めて判断できます。
カード番号の桁はどう数えるのか?
桁数は、区切り記号を除いた数字だけで数えます。カード表面には 4 桁ずつ空白で区切って印字されることが多く、フォームでも同じ見た目で表示されるのが一般的ですが、空白やハイフンは番号の一部ではありません。桁数を判定する処理では、これらを取り除いてから数える必要があります。
また、桁数は短いほうから順に判定するのではなく、許容される範囲として扱います。利用者が入力する番号はブランドによって長さが変わるためです。番号を画面に表示するときは、先頭 6 桁と末尾 4 桁だけを見せ、中央を伏せ字にする方法が広く使われています。
決済フォームでの区切り表示は必要か
入力欄に空白を自動で差し込む表示は、読みやすさを大きく改善します。ただし実装上の判断がいくつか伴います。入力途中で区切りを挿入すると、カーソルの位置がずれて打ちにくくなることがあります。また、貼り付けられた文字列から区切りを除去し忘れると、桁数の判定が狂います。
貼り付けへの対応は必須と考えてください。利用者は別の画面やカード情報の控えから番号をコピーしてくることが多く、その際に空白や記号が混ざります。入力欄側では、まず数字以外を除去し、そのうえで桁数を評価する流れにすると、見た目の整形と内部の扱いを分離できます。表示用の整形と保存用の値は別物として管理するのが原則です。
開発者向け: 入力の正規化と桁数の扱い
受け取った文字列は、次の順序で処理すると安全です。まず先頭と末尾の空白を除去します。次に数字以外の文字をすべて取り除きます。続いて桁数が許容範囲に入るかを確認し、最後に接頭辞からブランドを推定して、そのブランドの長さの規則に当てはめます。
よくある落とし穴を挙げます。全角の数字をそのまま数えて桁数が合わないと判断してしまう。ハイフンや空白を桁として数えてしまう。許容桁数を 1 つの値に固定してしまう。接頭辞の判定を桁数より先に行い、短すぎる入力で誤ったブランドを返してしまう。いずれも、正規化の段階を明確に分けておけば避けられます。
もう一点、保存形式と表示形式を混同しないことが重要です。内部では数字だけの文字列として保持し、画面表示や帳票では区切りを入れて整形します。この分離を保てば、桁数の判定と使いやすさを同時に損なわずに済みます。なお、テストに使う番号は、構造としては妥当でも実際には発行されていない合成の値であることを前提としてください。形式が正しいことと発行済みであることは別です。ブランドごとの接頭辞の範囲は カードブランド別のテスト番号の選び方 に、番号を実際に用意したいときは テスト用クレジットカード番号生成 にまとめています。
次のステップ
手元にある番号を 1 件選び、接頭辞・口座部分・最終桁の 3 つに切り分けてみてください。切り分けられれば、長さの判定と接頭辞の判定をどちらから先に行うべきかが自然に見えてきます。次に、自分のフォームが貼り付け入力を正しく正規化できているかを、空白入りとハイフン入りの文字列で確認しておきましょう。テストデータとして何を選ぶかの考え方は テストカード番号の基礎知識 で説明しています。