IBAN検証の仕組み:送金前に入力ミスを見つける方法
IBANの検証は、口座番号そのものではなく数式で行われています。国コードと口座情報を並べ替えた数値を97で割り、余りがちょうど1になるかどうかを確認するだけで、その口座が実在するかどうかは一切見ていません。日本国内の振込にIBANを使う場面はありませんが、ヨーロッパの取引先に送金したり、ヨーロッパの顧客から支払いを受け取ったりするときにはこの番号が必要になります。1桁でも打ち間違えると、ここで説明する仕組みによってほとんどの場合その場で弾かれます。
IBANに実際に含まれている情報
IBAN(International Bank Account Number)は、先頭2文字のISO国コード、続く2桁のチェックディジット、そのあとに続くBBAN(Basic Bank Account Number、銀行コードと口座番号を含む部分)という3つの塊でできています。BBANの桁数と構成は国ごとに固定されていて、ドイツなら銀行コード8桁+口座番号10桁、フランスなら銀行コード5桁+支店コード5桁+口座番号11桁+検査用文字2桁というように、国内の口座番号体系をそのままIBANの枠に収めた形になっています。
よく混同されるのがBIC(SWIFTコード)との関係です。BICは銀行そのものを特定するコードで、IBANは口座を特定する番号です。国際送金では両方を求められることがありますが、片方がもう片方の代わりになることはありません。
そしてもう一つ重要なのが、IBANの検証に通ったからといって、その口座が実在すること、あるいは意図した相手の口座であることは何も証明されないという点です。証明できるのは「この番号が数学的に正しい形式を持っている」ということだけです。実際にその口座が存在し、資金を受け取れる状態にあるかどうかは、送金を受け付ける銀行側のシステムでしか確認できません。
MOD-97チェックサムを一歩ずつ計算する
チェックディジットの検証にはISO 13616で定められたMOD-97という方式が使われます。ここでは実在するドイツのIBAN構造としてよく引用される例、DE89 3704 0044 0532 0130 00 を使って、実際にどう計算されるかを追ってみます。
- スペースを除去し、先頭4文字(国コード2文字+チェックディジット2桁)を末尾に移動する。
DE893704004405320130 00→ 先頭のDE89を末尾へ動かすと370400440532013000DE89になる。 - アルファベットを数字に変換する。A=10、B=11、C=12……Z=35という対応表に従うと、D=13、E=14。末尾の
DE89は13・14・8・9を順に並べた131489という6桁の並びになり、文字列全体は24桁の数値370400440532013000131489になる。 - この24桁の数値を97で割った余りを求める。桁を1つずつ読みながら「余り = (これまでの余り × 10 + 次の桁) mod 97」を繰り返していくと、最後まで計算し終えた時点の余りはちょうど1になる。
| ステップ | 内容 | 結果 |
|---|---|---|
| 1. 並べ替え | DE89を末尾へ移動 | 370400440532013000DE89 |
| 2. 数値化 | D→13、E→14に変換 | 370400440532013000131489(24桁) |
| 3. MOD-97 | 24桁の数値を97で割る | 余り = 1(有効) |
ISO 13616はこの余りが1であることを有効性の条件としています。今回は1になったので、このIBANはチェックサムに合格します。
では、ここで最後の桁を1つだけ打ち間違えたとします。DE89 3704 0044 0532 0130 00 の末尾を 01 に変えて DE89 3704 0044 0532 0130 01 と入力してしまった場合です。同じ手順で並べ替えて数値化すると、最後にできる24桁の数値だけが変わり、97で割った余りは28になります。1ではないので、この時点でチェックサムは不合格となり、ツールは即座に無効と表示します。
たった1桁、しかも末尾という目立たない場所の入力ミスでも、この仕組みはきちんと拾い上げます。実際の送金の現場で起きる打ち間違いや桁の入れ替えのほとんどは、振込ボタンを押す前にこの計算で検出できるということです。
自分のIBANをチェックする
入力したIBANの国コード、桁数、MOD-97チェックサムをその場で確認できます。
よくある間違い
「2文字+15〜34文字ならIBANとして有効」と思い込むこと。 IBANの全体の長さは国ごとに1つの値に固定されていて、幅を持たせた許容範囲ではありません。ドイツは22文字、フランスは27文字、ノルウェーは最短の15文字というように、国コードを見た時点で正しい桁数は一意に決まります。桁数が国の規定と違う時点で、チェックサムを計算するまでもなく無効です。
| 国コード | 国名 | IBANの総文字数 |
|---|---|---|
| NO | ノルウェー | 15 |
| BE | ベルギー | 16 |
| NL | オランダ | 18 |
| DE | ドイツ | 22 |
| GB | イギリス | 22 |
| ES | スペイン | 24 |
| FR | フランス | 27 |
| IT | イタリア | 27 |
IBANとBIC(SWIFTコード)を同じものだと思ってしまうこと。 前述の通り、BICは受取銀行を特定するコードで、IBANは口座番号にあたります。国際送金フォームで両方の入力欄があるのは重複ではなく、別々の情報を求められているからです。
チェックサムに通った=口座が実在して正しい相手のものだと誤解すること。 MOD-97の計算はあくまで数字の並びが規定通りの形式かどうかを確認しているだけです。桁を意図的に、しかし計算上つじつまが合うように書き換えれば、実在しない口座番号でもチェックサムを通過してしまう可能性はあります。相手が本当にその口座の持ち主かどうかは、振込先の名義確認や銀行側の照合に頼るしかありません。
手入力でOと0、Iやlと1を取り違えること。 ドイツやフランスなど多くの国のBBAN部分は数字のみですが、国によってはアルファベットも有効な文字として使われるため、文字と数字の見た目の混同がそのまま間違いになるとは限りません。とはいえ、フォントによってはOと0、大文字のIと小文字のlと数字の1が区別しにくく、手入力や手書きからの転記でよく起きる混乱の原因になります。コピーペーストで済ませられる場面ではできる限りそうし、手入力する場合は1文字ずつ読み合わせることをおすすめします。
よくある質問
MOD-97とは何ですか。 IBANの末尾から2文字目の位置にある2桁のチェックディジットを検証するための計算方式です。国コードとチェックディジットを末尾に並べ替え、アルファベットを数字に変換したうえで97による剰余を求め、その結果が1になるかどうかで正しい形式かを判定します。ISO 13616で定められている国際標準の手法です。
チェックサムに合格したら、その口座は実在するということですか。 いいえ、そうではありません。合格するのは「この番号が数学的に正しい構造を持っている」ということだけです。口座が実際に存在するか、資金を受け取れる状態にあるかは、送金を受け付ける銀行のシステムでしか確認できません。
なぜ国によってIBANの桁数が違うのですか。 IBANは各国がもともと使っていた国内の口座番号体系を、共通の枠組みに収める形で作られているからです。銀行コードや支店コード、口座番号の桁数は国によって歴史的に異なり、その差がそのままIBAN全体の長さの違いになっています。ノルウェーのように口座番号が短い国もあれば、フランスのように支店コードと検査用文字まで含む国もあります。
この検証で入力ミスは完全に検出できますか。 大部分の入力ミスは検出できますが、理論上は例外があります。たとえば2桁を入れ替えたときに、たまたま97で割った余りが変わらず1のままになるような組み合わせが存在すると、その誤りは数学的には有効な番号として通過してしまいます。実務上こうしたケースは稀で、実際に起きる打ち間違いの大多数は検出されますが、チェックサムの合格を絶対的な保証と考えるべきではありません。