チェックサムの仕組み
クレジットカード番号、IBAN、税務ID、暗号資産アドレスにはすべて、他の桁から計算される隠された余分な桁が1~2つ含まれています。1文字でも入力ミスがあると計算が合わなくなるため、検証器は銀行やブロックチェーンに問い合わせることなく、オフラインで即座に入力ミスを検出できます。
チェックサムとは何か
チェックサム(またはチェックディジット)とは意図的に設けられた冗長性です。番号が発行される際、1つ以上の桁は自由に選ばれるのではなく、決められた計算式に従って他の桁から計算されます。その計算式を知っている人なら後からそれらの桁を再計算して比較できます。一致すればその番号は内部で整合性が取れていることになり、一致しなければ入力ミス、読み間違い、または破損があったということです。
これがチェックサムが保証するすべてです。アカウントが存在するか、誰が所有しているか、何が保管されているかについては何も言及しません。この点は本サイトのすべての検証器が繰り返し指摘するところで、両者を混同しやすいためです。
実例1 — ルーン法、クレジットカード番号のアルゴリズム
ルーン法はVisa、Mastercard、その他ほとんどの決済カードで採用されています。定番の例として7992 7398 713を挙げます。最も右側の桁から始めて、2番目ごとの桁を2倍にし、2桁になる場合はその桁を足し合わせます。その後、すべての値を合計します。
| 桁 | 右からの位置 | 2倍に? | 〜とみなされる |
|---|---|---|---|
3 | チェックディジット | — | 3 |
1 | 右から2番目 | 1 × 2 = 2 | 2 |
7 | 3番目 | — | 7 |
8 | 4番目 | 8 × 2 = 16 → 1 + 6 | 7 |
9 | 5番目 | — | 9 |
3 | 6番目 | 3 × 2 = 6 | 6 |
7 | 7番目 | — | 7 |
2 | 8番目 | 2 × 2 = 4 | 4 |
9 | 9番目 | — | 9 |
9 | 10番目 | 9 × 2 = 18 → 1 + 8 | 9 |
7 | 11番目 | — | 7 |
右側の列の合計は 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70 です。70は10で割り切れるため、その番号は有効です。どれか一桁を変えると合計が10の倍数にならなくなります。クレジットカード検証で試してみてください。この計算がご自身のデバイス上で実行されます。
実例2 — 重み付き合計(ISBN-10)
多くの国内ID番号では重み付き合計が使われます。各桁の数字に固定の重みを掛け、それらを足して余りを確認します。ISBN-10が最も分かりやすい例です。0-306-40615-2の場合、重みは10から1までの値となります:
0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132
132はちょうど11 × 12であり、モジュロ11の余りは0なので、そのISBNは有効です。ブラジルのCPF、ポーランドのPESELなど、他にも多数の識別子が独自の重みと法を用いた同じパターンを採用しています。そのため、1つの一括ID検証で数千件を1秒でチェックできます。
実例3 — IBANとモジュロ97
国際銀行口座番号にはISO 7064 mod 97-10が使用され、これは2つのチェックディジットを持つより強力な方式です。標準的な例としてGB82 WEST 1234 5698 7654 32を見てみましょう:
- 国ごとの長さを確認します。英国のIBANは22文字です。✓
- 最初の4文字を末尾に移動させます:
WEST12345698765432GB82。 - 各アルファベットを2桁の数字に置き換えます(A = 10 … Z = 35):W→32、E→14、S→28、T→29、G→16、B→11とし、
3214282912345698765432161182が得られます。 - その数を97で割ります。余りは正確に1でなければならず、実際にそうなっています。
97は素数であり、2桁の入れ替えよりも大きいため、モジュロ97では単一文字の誤りや文字の入れ替わりをすべて検出できます。偶然に通過するのは97個中約1つのランダムな文字列だけです。IBAN検証では、これらの各チェック項目が通過または失敗したかが表示されます。
暗号通貨アドレス:ハッシュから生成されるチェックサム
ビットコインやイーサリアムのアドレスは極めて厳格な仕組みを採用しており、入力ミスがあれば資金が永続的に誰にも届かなくなってしまいます。従来のビットコインアドレス(1…、3…)ではBase58Checkが使用されます。アドレスのペイロードをSHA-256で2回処理し、その結果の先頭4バイトをチェックサムとして付加します。1文字だけ間違えるとハッシュが完全に変化するため、入力ミスが見逃される確率は約40億分の1です。新しい形式のbc1…アドレスではBech32またはBech32mが採用されており、これは最大4文字までの誤りを必ず検出できる誤り訂正コードです。イーサリアムのEIP-55では、チェックサムが大文字と小文字のパターンに隠されています。
「ビットコインアドレス検証ツール」と「イーサリアムアドレス検証ツール」は、ブラウザ内でこれらのアルゴリズムを実装し、ページ読み込みのたびに公式のテストベクターと照合して自身の正しさを確認します。
各方式の概要
| 方式 | 利用対象 | 検出可能な誤り | ランダムな誤りが見逃される確率 |
|---|---|---|---|
| ルーン法(mod 10) | クレジットカード・デビットカード、IMEI、多くの国家ID | すべての1桁の誤りおよびほとんどの隣接する文字の入れ替わり | 約10分の1 |
| ISO 7064 mod 97-10 | IBANや一部の税務番号・法人番号 | あらゆる単一エラーおよびすべての文字入れ替え | 約97分の1 |
| 重み付き合計値、mod 10または11 | ISBN-10、ブラジルのCPF、ポーランドのPESEL、その他多数のID | 単一エラーおよびほとんどの文字入れ替え | 約10分の1または11分の1 |
| Base58Check(ダブルSHA-256、4バイト) | ビットコインのレガシーアドレス(1…、3…) | いかなるタイプミスも、ほぼ確実に検出可能 | 約40億分の1 |
| Bech32 / Bech32m (BCHコード) | ビットコインのSegWitおよびTaprootアドレス (bc1…) | 保証付き:最大4文字に及ぶエラーでも検出可能 | 10億分の1未満 |
| EIP-55 (keccak-256ケース変換) | イーサリアムのアドレス | 大文字と小文字のパターンによる入力ミスも検出可能 | 混在ケースの入力では誤検出率が非常に低い |
なぜバリデータはご自身のデバイスで実行すべきか
上記の処理はすべて既存の数字に対する算術演算です。バリデータがカード番号や税務ID、ウォレットアドレスをサーバーに送信する理由はなく、むしろ送信すべきではありません。当サイトのすべてのバリデータはローカルで実行されます。オフラインツール一覧にまとめられており、当サイトのツールがデータをアップロードするか確認するためのガイドでは、どのサイトについても20秒でその確認ができる方法を紹介しています。
よくある質問
有効なチェックサムがあるからといって、その番号が実在または有効であるとは限りませんか?
いいえ。チェックサムは数字が内部的に整合していること、つまりその番号が存在しうることを証明するだけです。口座が開設されているか、誰が所有しているか、残高がいくらかを知ることはできません。当サイトのすべてのバリデータはその点をページ上で明記しており、この違いは重要だからです。
誤った番号がまだ通過する可能性はどれくらいでしょうか?
方式によって異なります。単一のmod-10チェックディジットでは、約10個に1個のランダムなエラーが通過します。IBANのmod 97では約97個に1個が通過し、4バイトのBase58Checkチェックサムでは約40億個に1個が通過します。重要な特性は、よくある人為的ミス——1桁の誤入力や2桁の入れ替わり——がすべて検出される点です。
なぜ一部の識別子にはチェックサムが全くないのでしょうか?
古いまたは単純な方式は、オフラインで検証するのではなくレジストリで照会するように設計されており、一部の番号体系はその慣習よりも前に存在していました。こうした場合、検証器は長さとフォーマットのみを確認できます。
カード番号やID番号を検証器に貼り付けても安全でしょうか?
ご自身のデバイス上で検証が実行される場合のみです。チェックサムは既に持っている桁数に対する演算なので、検証器がそれらをサーバーに送信する正当な理由はありません。ツールがデータをアップロードするかどうかを確認するためのガイドに記載されている機内モードテストを使えば、ツールがローカルで動作しているかを確認できます。
チェックサム、ハッシュ、暗号化の違いは何でしょうか?
チェックサムは偶発的なタイプミスを検出するために設計された短いチェックディジットです。暗号学的ハッシュは、意図的な変更でも検出可能で元のデータを復元できないように設計された長いフィンガープリントです。暗号化は、キーがなければ読み取れないようにデータを変換します。Base58Checkはハッシュを使ってチェックサムを生成するため、偶然に騙すのは非常に困難です。