開発 へ戻る
IBAN チェック — 国際銀行口座番号の Mod 97 検算

IBAN チェック — 国際銀行口座番号の Mod 97 検算

IBAN (International Bank Account Number) を ISO 13616 準拠で検証します。国コード (2 文字) + チェックディジット (2 桁) + BBAN (国別、最大 30 文字) の長さチェック、文字→数字変換 (A=10 〜 Z=35) を行った Mod 97 検算、国名・予想 BBAN 長さの照合まで。ドイツ DE89... / 英国 GB29... / フランス FR14... / イタリア IT60... / オランダ NL91... など 80+ 国の長さテーブルを内蔵。複数行を貼り付けて一括チェック、結果テーブル + CSV エクスポート、Valid / Invalid 別コピー。B2B 決済、SEPA 振込前のサニタイズ、データ移行 QA、フォーム入力エラー削減に。番号はブラウザ内でだけ処理されます。

使い方

IBAN を 1 行 1 件で入力 (空白・ハイフン・小文字は自動正規化)。 「検証する」で ISO 13616 構造チェック → 国別長さ → Mod 97 検算を一括実行。 結果テーブルから国名・BBAN・失敗理由を確認。Valid / Invalid 別コピー、CSV ダウンロードで取り出せます。

詳細解説

IBAN が扱う情報の性質

IBAN (International Bank Account Number) は銀行口座を一意に特定する識別子です。国コード・チェックディジット・BBAN (Basic Bank Account Number) から構成され、欧州圏の銀行間送金で必須となる情報です。口座番号が正確に特定できる点では、氏名や住所と組み合わせることで詐欺・不正送金・なりすましの起点になりえる情報です。

特にフィンテック・ECサイト運営・会計システム開発の現場では、顧客や取引先から IBAN を大量に収集・処理する機会があります。これらをバリデーションのためにオンラインサービスへ投げてしまうと、一括で口座番号リストが外部サーバーに渡ることになります。バリデーションという行為自体は単純な計算であるにもかかわらず、必要以上のリスクを負う構造です。

オンライン検証サービスを使うときの構造的リスク

「IBAN 検証 API」は多数存在しますが、リクエストごとに口座番号がサービス側のサーバーに届きます。サービスによってはリクエストログを一定期間保持します。また利用規約上、送信されたデータを機械学習・サービス改善・分析に使う権利を主張しているケースもあります。

フォームから顧客が入力した IBAN をそのままバリデーション API に流しているシステムでは、顧客の同意なしに口座番号が第三者サーバーに渡ります。GDPR・改正個人情報保護法の観点からも、必要最小限の情報処理原則 (データミニマゼーション) に反する可能性があります。

BigInt + 内蔵テーブルでブラウザ内完結する仕組み

IBAN バリデーションは Mod 97 チェックサムの計算と国別長さテーブルの照合だけで完結します。Mod 97 は「国コード+チェックディジットを末尾に移動 → 文字 A-Z を 10-35 に変換 → 整数として mod 97 == 1 か確認」という純粋な算術処理です。このツールは JavaScript の BigInt を使ってこの計算をブラウザ内で実行します。80+ 国の長さテーブルも静的に内蔵しています。

ページ読み込み後は一切のネットワーク通信が発生しません。DevTools の Network タブを開いた状態で IBAN を入力・検証しても、新規リクエストが発生しないことを目視で確認できます。社内の会計システムや顧客データを扱う開発作業でも、入力した番号が外に出ることはありません。

CSV 取り込み前の一括チェックとして

実務での典型的な使い方は、取引先から受け取った振込先 IBAN のリスト、または顧客登録フォームから蓄積されたデータをまとめて検証する作業です。フォーマットのゆれ (スペース・ハイフン有無・小文字) は自動で正規化されるため、前処理が不要です。Invalid になった行は失敗理由 (長さ不一致・Mod 97 エラー・未知の国コード) ごとに確認でき、CSV でダウンロードして元データと突き合わせることができます。送金前にリストを潰しておくことで、組み戻し手数料や遅延リスクを減らせます。

ISO 13616 / Mod 97-10 アルゴリズムの数学的根拠

IBAN のチェックサム計算は ISO/IEC 7064 が定義する Mod 97-10 アルゴリズムに基づきます。手順は (a) 先頭 4 文字 (国コード 2 + チェックディジット 2) を末尾に移動、(b) 全文字を数値化 (A=10Z=35、数字はそのまま) して連結した巨大整数を作る、(c) その整数を 97 で割って余りが 1 になることを確認、です。DE89370400440532013000 であれば 370400440532013000DE89370400440532013000131489 → mod 97 = 1 となります。

97 を法とする理由は、97 が素数で、2 桁の数字 1 つの転記ミスや隣接 2 文字の入れ替えのほぼすべてを検出できる性質を持つためです。具体的には Mod 97-10 は単一桁誤り 100%・隣接転置 99.99% を検出します。luhn-check で用いる Luhn アルゴリズム (Mod 10、クレジットカード) より検出率が高く、一方で計算には桁数が多くなる分のコストがかかります。本ツールは BigInt を使うことで任意精度演算を JavaScript で正確に行います (Number 型では精度不足で 16 桁を超えると誤差が出ます)。

SEPA 領域・SWIFT/BIC との関係と国別 BBAN の差

IBAN は欧州銀行委員会 (EBA) が策定し、現在は ISO 13616 として国際標準化されています。SEPA (Single Euro Payments Area) 加盟国では IBAN が必須で、ユーロ建ての国際送金は IBAN ベースで処理されます。米国・カナダ・日本は IBAN を採用していないため、これらの国への送金は SWIFT/BIC コードと別形式の口座番号を組み合わせる必要があります。

BBAN (Basic Bank Account Number) の構造は国ごとに完全に異なります。ドイツ DE は 8 桁の銀行コード + 10 桁の口座番号、英国 GB は 4 文字の銀行コード + 6 桁の支店コード + 8 桁の口座番号、フランス FR は 5 桁の銀行コード + 5 桁の支店 + 11 文字の口座 + 2 桁の RIB key、と国別仕様書を見ないと内訳が分からない設計です。本ツールは IBAN の長さ判定までは国別テーブルで行いますが、BBAN 内部の銀行コード抽出までは行いません。SEPA Direct Debit のマンデート生成や口座所有者の銀行名特定までは別途国別ライブラリ (ibantools の bank lookup 機能など) が必要です。請求書メールアドレスの精査と組み合わせる場合は email-validate を併用できます。

よくある質問

Mod 97 検算って何?
ISO 13616 で定義された IBAN のチェックサム計算。「国コード + チェックディジット を末尾に移動」→「文字 (A-Z) を 2 桁数字 (10-35) に変換」→「整数として Mod 97」が 1 なら有効。書き間違いやランダム入力をほぼ確実に検出できます。
Valid なら本物の口座番号?
いいえ、構造的なチェックのみで実際の銀行に問合せはしません。完全に形式チェック (typo 検出 + BBAN 形式) なので、本当に口座が存在するか / 残高があるかは銀行 API (Open Banking 等) に問い合わせてください。
対応国は?
ヨーロッパ主要国 (DE / GB / FR / IT / ES / NL / BE 等)、北アフリカ・中東・南米まで 80+ 国の長さテーブルを内蔵。日本 (JP)・米国 (US)・カナダ (CA) は IBAN を採用していないため対象外です。
SEPA とどう関係?
SEPA (Single Euro Payments Area) では IBAN を口座識別子として使うのが必須。SEPA 加盟国 (EU + 数カ国) はすべて IBAN 対応。本ツールで SEPA 振込前のサニタイズができます。
データはどこかに送信されますか?
いいえ。すべてブラウザ内 (JavaScript の BigInt + 内蔵テーブル) で完結。

「送らない」を確かめるには

このツールは入力データを外部に送信しません。仕組み・監査手順・運営方針は以下で詳しく説明しています。

類似のツール

Luhn チェック — クレジットカード番号・IMEI 検証

Luhn チェック — クレジットカード番号・IMEI 検証

Luhn アルゴリズム (Mod 10) でクレジットカード番号 (Visa / MasterCard / Amex / Discover / JCB / Diners / UnionPay)、IMEI (携帯端末識別番号)、SIN (カナダ社会保障番号) などの妥当性を検証します。複数行を貼り付けて一括チェック、Visa / Amex などのブランドを IIN プレフィックスから自動判定、合計チェックサムの計算過程 (偶数桁を 2 倍、桁数和を取って合計) も表示。テストデータ作成、フォーム入力サニタイズ、データ移行の品質チェック、CSV 取り込み前の bulk validate に。番号はブラウザ内でだけ処理されます。

開発セキュリティ
メールアドレス検証 — RFC 5322 / 使い捨てドメイン / ロール検出

メールアドレス検証 — RFC 5322 / 使い捨てドメイン / ロール検出

メールアドレスを 1 行 1 件で貼り付けると、RFC 5322 ベースの構文検証 (local 部 / domain 部 / TLD / 長さ制限)、disposable (使い捨て) ドメイン検出 (mailinator / 10minutemail / guerrillamail など 100+ ドメインを内蔵)、ロールアドレス (admin / support / postmaster / no-reply 等) の判定、Gmail dot/+ tag 正規化を一括処理します。結果はテーブル表示 + CSV ダウンロード対応。MailChimp や Stripe にインポートする前のサニタイズ、フォームから収集したリストのクリーニング、配信前のバウンス予測に。メールアドレスはブラウザ内でだけ処理され、サーバーに送信されません。

開発抽出
正規表現テスター — マッチ / 置換のリアルタイム確認

正規表現テスター — マッチ / 置換のリアルタイム確認

パターンとフラグを入力するとテキスト内のマッチ箇所をリアルタイムでハイライト。キャプチャグループ・名前付きグループの内容も一覧表示。$1 などを使った置換プレビューにも対応。すべてブラウザ内で処理。

開発正規表現テキスト
ハッシュ生成 — SHA-1 / 256 / 384 / 512

ハッシュ生成 — SHA-1 / 256 / 384 / 512

テキストから SHA-1 / SHA-256 / SHA-384 / SHA-512 のハッシュ値を一括生成します。Web Crypto API ベースでブラウザ内処理。

開発ハッシュ生成