IBANジェネレーター&バリデーションツール - 銀行データテスト
欧州10か国分の有効なテスト用IBAN(国際銀行口座番号)を生成し、既存のIBANをMOD 97チェックディジット方式で検証する無料ツール。計算はすべてブラウザ内で行われ、入力したデータはサーバーに送信されない。金融ソフトウェアの開発とテスト、決済システムの動作確認に使われる。
IBANジェネレーター & バリデーター
ドキュメンテーション
IBANジェネレーターおよびバリデーションツール
このツールの機能
実際の銀行口座データを使用せずに金融ソフトウェアをテストする必要がありますか?検証チェックをパスする有効なIBAN形式が必要になります。このツールは、国固有の形式に従いランダムなIBANを生成し、ISO 13616標準を使用して既存のIBANを検証します。
以下は、このツールが解決する実践的な問題です:支払いシステムや銀行アプリケーションを構築する際、検証に失敗せず、実際の口座番号を公開するリスクのないテストデータが必要です。開発者がよく犯す間違いは、MOD 97チェックアルゴリズムをパスしない「偽の」IBANを作成し、間違った理由でテストが失敗することです。
このツールは2つの主要なタスクを処理します:
- ジェネレーター: サポートされているどの国に対しても、構造的に有効なIBANを作成します。生成された各番号は、本番システムで実行されるのと同じ検証チェックをパスします。
- バリデーター: IBAN構造、チェックディジット、国固有の書式を検証します。IBANが拒否される理由をデバッグする際に役立ちます。
IBAN(国際銀行口座番号)は、銀行が国境を越えて口座を識別する方法を標準化します。各IBANには、国コード、MOD 97で計算される2つのチェックディジット、および国によって異なる基本銀行口座番号(BBAN)が含まれています。これが複雑な理由は、ドイツでは22文字、フランスでは27文字が必要で、内部構造が完全に異なるためです。
IBANの仕組み
IBANの構造と形式
IBANは最大34の英数字で構成され、ほとんどのヨーロッパ諸国では22〜27文字を使用します。すべてのIBANは3つの部分に分かれています:
- 国コード:ISO 3166-1 alpha-2標準の2文字(ドイツはDE、イギリスはGB)
- チェックディジット:MOD 97を使用して全IBANを検証する2つの計算されたディジット
- 基本銀行口座番号(BBAN):国固有の部分で以下を含みます:
- 銀行識別子(ルーティング番号または銀行コードと呼ばれることもある)
- 支店識別子(イギリスではソートコードと呼ばれる)
- 口座番号
- 場合によっては追加の国内チェックディジット
ドイツのIBANを例に取ると、パターンDE2!n8!n10!nは以下を意味します:
DE= 国コード2!n= 2桁の数字のチェックディジット8!n= 8桁の銀行コード(Bankleitzahl)10!n= 10桁の口座番号(Kontonummer)
多くの人が驚くのは、国によってこれらの形式がいかに異なるかということです:
| 国 | 長さ | 構造 | 例 |
|---|---|---|---|
| ドイツ(DE) | 22 | DE2!n8!n10!n | DE89370400440532013000 |
| イギリス(GB) | 22 | GB2!n4!a6!n8!n | GB29NWBK60161331926819 |
| フランス(FR) | 27 | FR2!n5!n5!n11!c2!n | FR1420041010050500013M02606 |
| スペイン(ES) | 24 | ES2!n4!n4!n1!n1!n10!n | ES9121000418450200051332 |
| イタリア(IT) | 27 | IT2!n1!a5!n5!n12!c | IT60X0542811101000000123456 |
IBAN検証アルゴリズム
IBAN検証はISO 7064で定義されたMOD 97アルゴリズムに依存しています。IBANを検証する際に実際に行われることは:
- 最初の4文字(国コードとチェックディジット)を末尾に移動
- 各文字を数字に置き換え:A=10、B=11、Z=35まで
- 結果の数字文字列のモジュロ97を計算
- 有効なIBANは常に1の剰余を生成
数学的に:
なぜMOD 97なのか?ほぼすべての一般的なエラーを検出できるからです:単一の数字の間違い、桁の入れ替え、さらに似た文字を含むほとんどの入力ミス。実際には、偶発的なデータ入力エラーの約99.9%を検出できるため、国際標準となりました。
知っておくべき1つの特徴:IBANを生成する際、チェックディジットは「00」から始めて、アルゴリズムを実行し、98から剰余を引いた値を使用します。これにより、最終的なIBANが正しく検証されることを保証します。
ツールの機能
IBANジェネレーター
実際の口座番号を使用せずに、検証を通過するテスト用IBANを生成:
- 国の選択: 10の主要ヨーロッパ諸国(ドイツ、イギリス、フランス、スペイン、イタリア、オランダ、スイス、オーストリア、ベルギー、ポーランド)をサポート
- フォーマット準拠: 生成された各IBANは、公式の国の構造に一致し、MOD 97検証を通過
- ワンクリック生成: 設定不要 - 国を選択して生成するだけ
- クリップボードにコピー: シングルクリックで完全なIBANをテストに貼り付けるためにコピー
- 視覚的な内訳: カラーコード化された表示で、国コード、チェックディジット、銀行詳細を個別に表示
生成プロセス:
- 国固有のフォーマットテンプレートを選択
- BBAN部分にランダムな数字/文字を入力
- MOD 97を使用してチェックディジットを計算
- 完全なIBANを組み立てて検証
プロのヒント: テストデータベースにシードする際は、クロスボーダーシナリオをテストするために、複数の国からIBANを生成してください。実際の決済システムには、特定の国に特有のエッジケースがよくあります。
IBAN検証
本番環境に入る前にIBANの構造を確認し、フォーマットの問題を捉えます:
- フォーマット検証: 国固有の長さと構造の要件をチェック
- MOD 97検証: 完全なチェックディジットアルゴリズムを実行
- コンポーネント内訳: IBANが国コード、チェックディジット、銀行コード、口座番号にどのように分割されるかを正確に表示
- 具体的なエラーメッセージ: 一般的な「無効」メッセージではなく、実際に何が間違っているかを表示
- 自動フォーマット: スペースの有無に関わらずIBANを処理 - フォーマットは自動的に行われます
検証チェックは順番に実行:
- 国コードの認識(サポートされているか?)
- 長さの検証(その国の文字数が正しいか?)
- 文字タイプの検証(数字が期待される場所に数字、文字が許可される場所に文字)
- MOD 97チェックディジット計算(計算が合っているか?)
一般的なシナリオ: APIがユーザー入力から不均一なスペースを含むIBANを受け取ります。処理前に検証ツールを使用して正規化してください - 自動的にスペースを削除し、適切な形式を表示します。
ステップバイステップガイド
IBANの生成
- ジェネレータータブにアクセス: 「ジェネレーター」タブをクリック(デフォルトで選択)
- 国を選択: ドロップダウンメニューから希望の国を選択
- IBANを生成: 「IBAN生成」ボタンをクリック
- 結果を表示: 生成されたIBANがその構成要素の視覚的な内訳とともに表示される
- クリップボードにコピー: 「クリップボードにコピー」ボタンをクリックして、他の場所で使用するためにIBANをコピー
IBANの検証
- バリデータータブにアクセス: 「バリデーター」タブをクリック
- IBANを入力: 入力フィールドにIBANを入力またはペースト
- スペースや書式は自動的に処理される
- ツールは、フォーマット済み(スペースあり)と未フォーマットの両方のIBANを受け入れる
- 検証結果を表示: 入力と同時にツールがIBANを自動的に検証
- 詳細を確認: 有効なIBANの場合、構成要素の内訳が表示される
- エラーを確認: 無効なIBANの場合、問題を特定するための具体的なエラーメッセージが表示される
ユースケースと実世界の応用
ソフトウェア開発とテスト
APIテスト: 決済統合テストを構築する際、検証を通過するが実際のトランザクションをトリガーしないIBANが必要です。自動テストスイート用のテストIBANのバッチを生成し、異なる国の形式に対するエラー処理が正しく機能することを確認します。
フォーム検証: チェックアウトフローをテストしていますか? バリデーターを使用して、フロントエンドの検証がバックエンドの要件と一致することを確認します。支払いプロセッサが後で拒否するIBANフォーマットを受け入れてしまうのは、よくある問題です。開発中にこれを捉えることで、顧客の不満を防ぐことができます。
エッジケースのテスト: ほとんどの開発者は1〜2の国の形式でテストします。スイスの21文字のIBANを使用する顧客が、ドイツの22文字のIBANを想定しているシステムを使用する場合、何が起こるでしょうか? さまざまな国の形式を生成して、フィールドの長さと検証ロジックをストレステストします。
リグレッションテスト: IBAN検証ライブラリを更新した後、生成されたテストIBANを古いバージョンと新しいバージョンの両方に通します。不一致があれば、本番環境に影響を与える可能性のある破壊的な変更を示しています。
金融アプリケーション開発
決済システム: 国際送金機能を構築する際、IBANの構造自体がルーティング動作を決定するシナリオに遭遇します。文字を含むオランダのIBAN(BBAN内)は、数字のみのドイツのIBANでは検出できないバグを露呈します。
銀行ソフトウェア: IBANを解析して銀行コードや支店識別子を抽出するには、国固有のロジックが必要です。サポートされている各国のIBANを生成して、解析アルゴリズムがこれらのコンポーネントを正しく識別することを確認します。
コンプライアンス検証: 金融規制では、処理前にIBANを検証する必要があることがよくあります。このツールを使用して、システムが無効なチェックディジットや不正な形式を拒否することを証明するテストケースを作成します。これは監査証跡に不可欠です。
教育とドキュメンテーション
銀行標準教育: 国際決済システムについて学ぶ学生は、実際のIBANの構造を見ることで理解を深めます。複数の国からの例を生成して、異なる銀行システム間での標準化の仕組みを説明します。
APIドキュメンテーション: 実際のIBANを技術文書で使用する代わりに、クリーンな例を生成します。「テスト用にIBAN DE89370400440532013000を使用してください」のようなフレーズは、これらが安全なテスト値であることを開発者に即座に伝えます。
データ操作
データベースシーディング: 開発およびステージング環境には、現実的なテストデータが必要です。多様なIBANを生成して、プライバシーの懸念なく代表的な国際顧客プロファイルでデータベースを設定します。
データ匿名化: 本番環境からステージング環境に移行する際、実際のIBANを、テスト用に形式の妥当性を維持しながら機密情報を削除した生成されたIBANに置き換えます。開発環境におけるGDPRコンプライアンスに不可欠です。
代替手段と使用するタイミング
異なるツールは異なるニーズに適しています。以下に正直な比較を示します:
商用銀行API(Stripe、Adyenなど)
実際の銀行レジストリに対する本番環境での検証に最適です。これらのサービスは、IBANが単に形式的に正しいだけでなく、実際のアクティブな口座に対応しているかを確認します。
使用するタイミング: IBANが存在し、支払いを受け取れることを確認する必要がある場合。
制限: 費用がかかる(通常は1APIコールごとの価格設定)、統合作業が必要、さらに開発にはテスト用IBANが必要—そこでこのツールが役立ちます。
プログラミング言語ライブラリ(ibantools、iban.js、python-stdnum)
アプリケーションコードに埋め込む検証に最適です。JavaScriptのibantoolsやPythonのpython-stdnumのようなライブラリは、検証と生成の両方の機能を提供します。
使用するタイミング: ビルドまたは実行時の検証の一部としてプログラム的なアクセスが必要な場合。
制限: 統合に開発労力が必要、さらにデバッグ中に特定のIBANを手動でテストする迅速な方法が必要—そこでウェブツールはテストスクリプトを書くよりも高速です。
SWIFT IBAN レジストリ
SWIFTが管理する公式IBANレジストリは、すべての国の形式と検証ルールを一覧表示しています。これは信頼できる情報源です。
使用するタイミング: IBANサポートをゼロから実装し、公式の仕様が必要な場合。
制限: これはドキュメントであり、ツールではありません。仕様に基づいてIBANを実際に生成および検証するものを構築または見つける必要があります。
公式銀行バリデータ
多くの国立銀行は、国固有のバリデータ(例:ドイツのIBANに対するブンデスバンク)を提供しています。これらは特定の国に対して非常に正確です。
使用するタイミング: 1つの国のみを扱い、銀行レベルの検証詳細が必要な場合。
制限: 単一国に焦点を当てています。国際的な決済システムを構築する場合、各国のバリデータが必要になります。
このツールが意味を持つタイミング
API統合なしで迅速なテストが必要な場合にこのツールを使用します。開発およびデバッグ中に、有効なテストデータをすぐに生成したり、特定のIBANが検証に失敗する理由を確認したりする際に特に役立ちます。コードベースの本番グレードの検証ライブラリに取って代わるものではありませんが、使い捨てのテストスクリプトを書くよりも高速です。
よくある質問
IBANとは何か、なぜ重要なのか?
IBANは国際銀行口座番号(International Bank Account Number)の略で、国際標準化機構(ISO)が国境を越える支払いでのエラーを減らすために作成した標準化された形式です。IBANが導入される前は、各国が独自の口座番号形式を使用していたため、頻繁に間違いや送金の失敗が発生していました。IBANは、送金前にエラーを検出するために、国コードとチェックディジットを追加しています。
生成されたIBANの正確性はどうですか?
生成されたIBANは、ISO 13616で定義されたMOD 97検証アルゴリズムに合格する数学的に正確なものです。各国固有の構造に従っています。ただし、ランダムに作成されており、実際の銀行口座に対応するものではありません。それが目的です。実際の口座に誤って当たることがないため、テストに安全なのです。
このツールはどの国をサポートしていますか?
現在、ドイツ、イギリス、フランス、スペイン、イタリア、オランダ、スイス、オーストリア、ベルギー、ポーランドの10のヨーロッパ諸国をサポートしています。これらは、ヨーロッパの決済システムで最も一般的なIBANフォーマットをカバーしています。他の国が必要な場合は、フィードバックフォームが追加をリクエストする最適な方法です。
生成されたIBANを実際の送金に使用できますか?
絶対にできません。これらはテスト用のIBANのみです。フォーマット検証は通過しますが、実際の銀行口座には接続されていません。実際の取引に使用すると、支払いの失敗または拒否が発生します。開発、テスト、教育目的のみに使用されます。
IBAN検証は実際にどのように機能しますか?
バリデーターは4つのチェックを順番に実行します:
- 国コード:認識された2文字のコードか?
- 長さ:その国の必要な長さに一致するか?(ドイツ = 22、イギリス = 22、フランス = 27など)
- 文字タイプ:国のフォーマットに基づいて、文字と数字が正しい位置にあるか?
- MOD 97チェック:ISO 7064に従って、数学的チェックサムが1に等しいか?
いずれかのチェックが失敗すると、何が間違っているかを説明する特定のエラーメッセージが表示されます。
スペースはIBANで重要ですか?
検証には関係ありません。IBANは通常、読みやすさのために(4桁ごとに)スペースを入れて表示されますが、スペースは装飾的なものです。DE89 3704 0044 0532 0130 00とDE89370400440532013000は、検証目的では同一です。このツールは自動的に両方の形式を処理します。
データはサーバーに送信されたり、どこかに保存されたりしますか?
いいえ。すべてがブラウザ内でJavaScriptを使用して実行されます。IBAN データがマシンを離れたり、サーバーに触れたり、どこかに保存されたりすることはありません。ブラウザの開発者ツールを開き、ネットワークタブを監視すれば、IBANの生成または検証時にリクエストがないことを確認できます。
リストにない国のIBANを検証する必要がある場合は?
現在、ドロップダウンにある10カ国のみをサポートしています。追加するには、各国の特定のフォーマットルールを実装する必要があります。ノルウェー、スウェーデン、その他の国の検証が必要な場合は、フィードバックフォームでお知らせください。需要に基づいて追加を優先します。
正しくフォーマットされたIBANが検証に失敗する理由は?
最も一般的な理由:
- 不正なチェックディジット:1桁でもMOD 97テストに失敗
- 入力ミス:文字の入れ替えや、どこかの桁の間違い
- 長さの誤り:その国に対して文字が不足または過剰
- 無効な文字:数字のみの場所に文字、またはその逆
- サポートされていない国:国コードは存在するが、サポートリストにない
エラーメッセージで具体的に何が間違っているかが示されます。
バグを報告したり、機能をリクエストしたりするにはどうすればよいですか?
ページ下部のフィードバックフォームを使用してください。具体的な例を含むバグ報告が最も役立ちます。機能リクエストの場合、使用事例を説明することで、次に何を構築するかの優先順位付けに役立ちます。
IBANとSWIFT/BICコードの違いは?
IBANは特定の銀行口座を識別し、SWIFT/BICコードは銀行または銀行支店を識別します。こう考えてください:SWIFTコードはどの銀行かを示し、IBANはその銀行のどの口座かを示します。国際送金では、多くの場合、両方が必要です。SWIFTコードは正しい銀行にルーティングし、IBANは特定の口座にルーティングします。
国を知らなくてもIBANを検証できますか?
はい、できます。すべてのIBANの最初の2文字は国コードだからです。バリデーターは最初の2文字を読み、適用する国のフォーマットを判断します。これが、IBANを貼り付けると国の検出が自動的に行われる理由です。手動で国を選択する必要はありません。
ヨーロッパ以外の国にもIBANフォーマットはありますか?
はい、ありますが、数は少ないです。IBANはヨーロッパで生まれ、最も普及していますが、サウジアラビア、UAE、ブラジルなどの国も採用しています。このツールは現在、ヨーロッパのフォーマットに焦点を当てています。これは国境を越える取引の大部分を占めているためです。SWIFTのIBANレジストリが完全なリストを管理しています。
IBANの読み方とデコード方法
DE89370400440532013000のようなIBANを見て、各部分の意味が気になったことはありませんか?以下に、どのIBANでもデコードする方法を説明します:
ステップ1:国コード(最初の2文字)
DE= ドイツ- どの国の書式ルールが適用されるかを示します
ステップ2:チェックディジット(次の2文字)
89= 計算されたチェックサム- これらの数字は、IBANの全体が有効であることをMOD 97で検証します
ステップ3:銀行コード(国によって異なる)
- ドイツのIBANでは
37040044= 8桁の銀行識別子 - 国によって長さが異なります(英国では4文字を使用)
ステップ4:口座番号(残りの文字)
0532013000= その銀行での実際の口座番号- 長さと形式は国によって異なります
国によってBBAN部分の構成が異なります。英国のIBANは、銀行コードと口座番号の間に6桁の支店コード(支店識別子)を含みます。フランスのIBANは、銀行コード、支店コード、口座番号をチェックキーと組み合わせています。これらの違いを理解することは、IBANをプログラム的に解析する際に重要です。
一般的なIBAN検証エラーとその修正方法
IBAN検証を実装する際に、以下の問題に繰り返し遭遇します:
「不正なチェックディジット」エラー
原因:MOD 97計算が1に等しくない。チェックディジットが間違っているか、IBANの他の部分にエラーがある。
修正方法:タイプミスを修正した後、再度検証を実行します。IBANのどこか1文字でも間違っているとチェックディジットの失敗につながります。これは仕様であり、データ入力エラーを捕捉するためです。
「国に対する不正な長さ」エラー
原因:IBANの文字数が国コードに対して多すぎるか少なすぎる。
修正方法:国コードが意図した国と一致することを確認します。ドイツのIBANは常に22文字、イギリスのIBANは22文字、フランスのIBANは27文字です。文字の欠落や余分な文字は、切り捨てや不正なデータを示しています。
「不正な文字」エラー
原因:その位置に存在してはいけない文字(例:数字のみが許可される場所に文字がある)。
修正方法:国固有の形式を確認します。例えば、ドイツのIBANは国コードとチェックディジットの後、すべて数字ですが、イギリスのIBANは銀行コードに4文字を含みます。
「サポートされていない国コード」エラー
原因:最初の2文字が認識された国コードではない、またはバリデーターでサポートされていない。
修正方法:国コードのスペルを確認します。一般的な間違いには、UKの代わりにGBを使用したり、国コードの代わりにENを使用したりすることがあります。このツールは10の欧州諸国をサポートしています。本番のバリデーターは、SWIFTレジストリ国のすべてをサポートする必要があります。
形式と口座の存在
重要な区別:検証は、IBANが構造的に正しいことを確認するものであり、口座が存在することを確認するものではありません。IBANはすべての検証チェックに合格しても、実際の銀行口座に対応していない可能性があります。本番の支払いシステムでは、形式検証以外に追加の検証が必要です。
開発者向け技術実装
アプリケーションにIBAN(国際銀行口座番号)サポートを組み込む場合、以下に複数の言語での実戦的なコード例を示します。これらの実装は、本番環境で遭遇するエッジケースを処理します:
IBANバリデーション
1function validateIban(iban) {
2 // スペースを削除し、大文字に変換
3 const cleanedIban = iban.replace(/\s/g, '').toUpperCase();
4
5 // 基本的な形式をチェック
6 if (!/^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$/.test(cleanedIban)) {
7 return false;
8 }
9
10 // 文字を並べ替え、文字を数字に変換
11 const rearranged = cleanedIban.substring(4) + cleanedIban.substring(0, 4);
12 const converted = rearranged.split('').map(char => {
13 if (/[A-Z]/.test(char)) {
14 return (char.charCodeAt(0) - 55).toString();
15 }
16 return char;
17 }).join('');
18
19 // mod 97を計算
20 let remainder = 0;
21 for (let i = 0; i < converted.length; i++) {
22 remainder = (remainder * 10 + parseInt(converted[i], 10)) % 97;
23 }
24
25 return remainder === 1;
26}
27
28// 使用例
29console.log(validateIban('DE89 3704 0044 0532 0130 00')); // true
30console.log(validateIban('GB29 NWBK 6016 1331 9268 19')); // true
31console.log(validateIban('DE89 3704 0044 0532 0130 01')); // false(チェックディジットが無効)
321def validate_iban(iban):
2 # スペースを削除し、大文字に変換
3 iban = iban.replace(' ', '').upper()
4
5 # 基本的な形式をチェック
6 if not (len(iban) > 4 and iban[:2].isalpha() and iban[2:4].isdigit()):
7 return False
8
9 # 最初の4文字を末尾に移動
10 rearranged = iban[4:] + iban[:4]
11
12 # 文字を数字に変換(A=10、B=11、...、Z=35)
13 converted = ''
14 for char in rearranged:
15 if char.isalpha():
16 converted += str(ord(char) - 55)
17 else:
18 converted += char
19
20 # mod 97が1であることを確認
21 return int(converted) % 97 == 1
22
23# 使用例
24print(validate_iban('DE89 3704 0044 0532 0130 00')) # True
25print(validate_iban('GB29 NWBK 6016 1331 9268 19')) # True
26print(validate_iban('DE89 3704 0044 0532 0130 01')) # False(チェックディジットが無効)
271public class IbanValidator {
2 public static boolean validateIban(String iban) {
3 // スペースを削除し、大文字に変換
4 String cleanedIban = iban.replaceAll("\\s", "").toUpperCase();
5
6 // 基本的な形式をチェック
7 if (!cleanedIban.matches("[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}")) {
8 return false;
9 }
10
11 // 最初の4文字を末尾に移動
12 String rearranged = cleanedIban.substring(4) + cleanedIban.substring(0, 4);
13
14 // 文字を数字に変換
15 StringBuilder converted = new StringBuilder();
16 for (char c : rearranged.toCharArray()) {
17 if (Character.isLetter(c)) {
18 converted.append(c - 'A' + 10);
19 } else {
20 converted.append(c);
21 }
22 }
23
24 // mod 97を計算
25 BigInteger numeric = new BigInteger(converted.toString());
26 return numeric.mod(BigInteger.valueOf(97)).intValue() == 1;
27 }
28
29 public static void main(String[] args) {
30 System.out.println(validateIban("DE89 3704 0044 0532 0130 00")); // true
31 System.out.println(validateIban("GB29 NWBK 6016 1331 9268 19")); // true
32 System.out.println(validateIban("DE89 3704 0044 0532 0130 01")); // false
33 }
34}
35IBAN生成
1function generateIban(countryCode) {
2 const countryFormats = {
3 'DE': { length: 22, bbanPattern: '8n10n' },
4 'GB': { length: 22, bbanPattern: '4a6n8n' },
5 'FR': { length: 27, bbanPattern: '5n5n11c2n' }
6 // 必要に応じて他の国を追加
7 };
8
9 if (!countryFormats[countryCode]) {
10 throw new Error(`国コード${countryCode}はサポートされていません`);
11 }
12
13 // 国のパターンに基づいてランダムなBBAN(基本銀行口座番号)を生成
14 let bban = '';
15 const pattern = countryFormats[countryCode].bbanPattern;
16 let i = 0;
17
18 while (i < pattern.length) {
19 const count = parseInt(pattern.substring(i + 1), 10);
20 const type = pattern[i];
21
22 if (type === 'n') {
23 // 数字文字を生成
24 for (let j = 0; j < count; j++) {
25 bban += Math.floor(Math.random() * 10);
26 }
27 } else if (type === 'a') {
28 // アルファベット文字を生成
29 for (let j = 0; j < count; j++) {
30 bban += String.fromCharCode(65 + Math.floor(Math.random() * 26));
31 }
32 } else if (type === 'c') {
33 // 英数字を生成
34 for (let j = 0; j < count; j++) {
35 const isLetter = Math.random() > 0.5;
36 if (isLetter) {
37 bban += String.fromCharCode(65 + Math.floor(Math.random() * 26));
38 } else {
39 bban += Math.floor(Math.random() * 10);
40 }
41 }
42 }
43
44 i += 2;
45 }
46
47 // チェックディジットを計算
48 const checkDigits = calculateCheckDigits(countryCode, bban);
49
50 return countryCode + checkDigits + bban;
51}
52
53function calculateCheckDigits(countryCode, bban) {
54 // チェックディジットを「00」とした初期IBANを作成
55 const initialIban = countryCode + '00' + bban;
56
57 // 並べ替えと文字の数字への変換
58 const rearranged = bban + countryCode + '00';
59 const converted = rearranged.split('').map(char => {
60 if (/[A-Z]/.test(char)) {
61 return (char.charCodeAt(0) - 55).toString();
62 }
63 return char;
64 }).join('');
65
66 // 98からmod 97を引いた値を計算
67 let remainder = 0;
68 for (let i = 0; i < converted.length; i++) {
69 remainder = (remainder * 10 + parseInt(converted[i], 10)) % 97;
70 }
71
72 const checkDigits = (98 - remainder).toString().padStart(2, '0');
73 return checkDigits;
74}
75
76// 使用例
77console.log(generateIban('DE')); // 有効なドイツのIBANを生成
78console.log(generateIban('GB')); // 有効な英国のIBANを生成
791import random
2import string
3
4def generate_iban(country_code):
5 country_formats = {
6 'DE': {'length': 22, 'bban_format': '8n10n'},
7 'GB': {'length': 22, 'bban_format': '4a6n8n'},
8 'FR': {'length': 27, 'bban_format': '5n5n11c2n'}
9 # 必要に応じて他の国を追加
10 }
11
12 if country_code not in country_formats:
13 raise ValueError(f"国コード{country_code}はサポートされていません")
14
15 # 国の形式に基づいてランダムなBBAN(基本銀行口座番号)を生成
16 bban = ''
17 format_str = country_formats[country_code]['bban_format']
18 i = 0
19
20 while i < len(format_str):
21 count = int(''.join(c for c in format_str[i+1:] if c.isdigit()))
22 type_char = format_str[i]
23
24 if type_char == 'n': # 数字
25 bban += ''.join(random.choices(string.digits, k=count))
26 elif type_char == 'a': # アルファベット
27 bban += ''.join(random.choices(string.ascii_uppercase, k=count))
28 elif type_char == 'c': # 英数字
29 bban += ''.join(random.choices(string.ascii_uppercase + string.digits, k=count))
30
31 i += 1 + len(str(count))
32
33 # チェックディジットを計算
34 check_digits = calculate_check_digits(country_code, bban)
35
36 return country_code + check_digits + bban
37
38def calculate_check_digits(country_code, bban):
39 # チェックディジット計算用の文字列を作成
40 check_string = bban + country_code + '00'
41
42 # 文字を数字に変換(A=10、B=11、...、Z=35)
43 numeric = ''
44 for char in check_string:
45 if char.isalpha():
46 numeric += str(ord(char.upper()) - 55)
47 else:
48 numeric += char
49
50 # 98からmod 97を引いた値を計算
51 remainder = int(numeric) % 97
52 check_digits = str(98 - remainder).zfill(2)
53
54 return check_digits
55
56# 使用例
57print(generate_iban('DE')) # 有効なドイツのIBANを生成
58print(generate_iban('GB')) # 有効な英国のIBANを生成
59参考文献と追加情報
- ISO 13616-1:2007 - 公式のIBANストラクチャー仕様
- SWIFTのIBANレジストリ - 国別のIBANフォーマットの信頼できる情報源
- ISO 7064:2003 - MOD 97チェックディジットアルゴリズムの仕様
- 欧州決済評議会 - SEPA - 単一ユーロ決済圏の文書
- 欧州中央銀行 - 決済システム - 欧州銀行統合基準
- 国際決済銀行 - 決済システム - 国際決済システム基準
IBANの検証を開始
支払いシステムのテストデータが必要ですか?上記のサポートされている国の有効なIBANを生成するか、既存のIBANを貼り付けて構造を確認してください。このツールはブラウザ内で完全に動作し、サインアップ、APIキー、サーバーへのデータ送信は一切ありません。
クイックヒント: 複数の国のIBANを生成してエッジケースをテストしてください。実際の支払いシステムは多様な形式を処理するため、1つの国の形式のみでテストすることは、本番環境のバグの一般的な原因となります。