IBANの検証は、支払い処理システムに不正な形式や入力ミスのある値が入る前に検出するための重要な手順です。検証では、形式、国コード、正しい長さを確認し、最も重要なチェックディジットを MOD-97アルゴリズムで検証します。ISO 13616-1はIBANの構造を定義し、ISO/IEC 7064はMOD97-10のチェックディジット方式を定義しています。これらの確認によって、基となる銀行口座が存在すること、割り当て済みであること、または支払いを受け取れることが証明されるわけではありません。
ステップ1:形式を確認する
IBAN検証の最初の手順は、形式の確認です。有効なIBANは、2文字の国コード、続く 2桁のチェックディジット(0-9)、そしてBasic Bank Account Number(BBAN)で始まります。検証前にすべての空白を削除し、文字列全体を大文字に変換してください。IBANは大文字と小文字を区別しませんが、処理時には正規化する必要があります。特殊文字を含む入力、数字で始まる入力、または国コードと数字のパターンに従わない入力は拒否してください。
ステップ2:国コードと長さを確認する
次に、国コードがシステムで認識され、対応していることを確認します。Random IBANは現在42か国に対応しており、DE(ドイツ)、FR(フランス)、GB(英国)、ES(スペイン)、IT(イタリア)などが含まれます。国ごとにIBANの長さが定められています。
| 国 | コード | 長さ |
|---|---|---|
| ドイツ | DE | 22 |
| フランス | FR | 27 |
| 英国 | GB | 22 |
| スペイン | ES | 24 |
| イタリア | IT | 27 |
入力の長さが指定された国コードの仕様と一致しない場合、そのIBANは無効です。
ステップ3:MOD-97でチェックディジットを検証する
最も重要な検証手順は、MOD-97アルゴリズムでチェックディジットを確認することです。誤りが一様なランダムであると仮定した単純なモデルでは、誤った値が通過する確率は1/97で、推定検出率は約98.97%です。ただし、実際の入力ミスのパターンは異なる場合があります。この検査で確認できるのは内部整合性であり、口座の存在ではありません。
- 最初の4文字(国コードとチェックディジット)を末尾に移動します。例:
DE89370400440532013000は370400440532013000DE89になります。 - 各文字を対応する数値に置き換えます(A=10、B=11、...、Z=35)。D=13、E=14 →
370400440532013000131489。 - 97を法とする剰余を計算します。得られた数を97で割ります。
- 余りを確認します。余りが 1 ならIBANは有効です。
コード例:JavaScript
このスニペットが検証するのはMOD-97チェックサムだけです。国、長さ、許可される文字、適用される国内ルールは別途検証してください。チェックサムに合格しても、口座の存在は確認できません。
function validateIBAN(iban) {
const cleaned = iban.replace(/\s/g, '').toUpperCase();
const rearranged = cleaned.slice(4) + cleaned.slice(0, 4);
const numeric = rearranged.replace(/[A-Z]/g, (ch) =>
(ch.charCodeAt(0) - 55).toString()
);
const remainder = BigInt(numeric) % 97n;
return remainder === 1n;
}
実装のベストプラクティス
本番システムでは、データフローの 複数の段階で検証を実装してください。
- クライアント側 — ブラウザで検証し、すぐにフィードバックを返します。
- サーバー側 — 改ざんを防ぐため、バックエンドでも検証を繰り返します。
- 保存時 — データベースには検証済みのIBANだけを保存します。
- 監視 — 検証失敗の集計メトリクスを記録し、完全なIBANをログに出力しないようにします。
当社のIBANジェネレーターでチェックサムが有効な合成テストケースを作成し、オンラインIBANバリデーターで実装を確認できます。どちらのツールも、口座が存在するか、割り当て済みかどうかは検証しません。
避けるべきよくある間違い
- 入力の 正規化(空白の削除と大文字への変換)を忘れる。
- 文字から数値への変換を誤る(A=1ではなくA=10であることに注意)。
- 通常の整数として検証しようとする(オーバーフローが発生します)。
- 規制が変わったときに 国別の長さの仕様を更新しない。
常に最新のISO 13616-1仕様と、ISO/IEC 7064 MOD97-10チェックディジット方式に基づいて検証してください。