Contents
1️⃣ MT103 が担う役割 ― 国際送金における「単一指示」メッセージ
| 項目 | 内容 |
|---|---|
| 対象 | 顧客が個別に指示するクロスボーダー送金(例:輸入代金、サービス料) |
| 位置付け | SWIFT ネットワーク上の 5 ブロック構造を持つ標準メッセージ。1 件の取引につき 1 メッセージが生成されるため、トレーサビリティとエラーハンドリングが容易 |
| 他メッセージとの差異 | MT102 は複数指示をひとつにまとめたバッチ送金。MT103 は「1 件 = 1 メッセージ」なので、個別の承認・追跡が必要なシーンで採用される |
ポイント:国際送金業務では、顧客ごとの指示内容を正確に伝えることが最重要。MT103 はそのための「標準化された名刺」のような役割を果たします。
2️⃣ MT103 のブロック構成と主要フィールド
2.1 ブロック概要(5 ブロック)
| ブロック | 主な内容 | 必須か |
|---|---|---|
| Block 1 – Basic Header | 発信銀行・受信銀行の BIC、メッセージタイプ、サービス ID 等の固定長ヘッダー。タグ形式ではなく、SWIFT が内部で管理する構造です。 | 必須(送信時に自動付与) |
| Block 2 – Application Header | 送受信区分(入力/出力)と優先度。CRED(顧客送金)やACK 等が設定されます。 | 必須 |
| Block 3 – User Header | 任意の補助情報(例:代替 BIC、取引番号)。使用は銀行側のポリシー次第です。 | 任意 |
| Block 4 – Text (Body) | 取引詳細を示すタグ群(:20:, :32A:, …)。実務上最も重要で、必須タグが多数含まれます。 | 必須 |
| Block 5 – Trailer | チェックサムやデジタル署名などの補助情報。エラー検知に利用されることがあります。 | 任意 |
2.2 Block 4 に必ず出現する代表的タグ
| タグ | 意味 | フォーマット例 |
|---|---|---|
| :20: | Transaction Reference (送金指示の一意識別子) | 20230429ABC12345(16 文字以内) |
| :23B: | Bank Operation Code – 「CRED」 が標準 | CRED |
| :32A: | Value Date + Currency + Amount | 240531USD1234567,89(YYMMDD、3 桁通貨コード、コンマ区切り金額) |
| :50K / :50F | Ordering Customer (送金依頼人) | /123-4567890\nJohn Doe\n1‑2‑3 Example St., Tokyo |
| :59: | Beneficiary Customer (受取人) | /987654321\nACME Corp.\n45 Business Rd., New York |
| :71A: | Details of Charges – SHA / BEN / OUR のいずれか | SHA |
注意:各タグは ASCII 文字のみ使用可能で、長さ制限が定められています。超過すると SWIFT バリデーションでエラーとなります。
3️⃣ フィールド別書式要件と実装ヒント
| 項目 | 書式要件 | 実装上のチェックポイント |
|---|---|---|
| 文字セット | ASCII(英大文字・数字・記号) | 入力前に iconv('UTF-8','ASCII//TRANSLIT',$str) で変換、非対応文字は除外 |
| 日付 | YYMMDD(6 桁) | 正規表現 /^\d{6}$/、DateTime::createFromFormat('ymd',$value) で検証 |
| 金額 | 最大 15 桁、コンマ区切り小数部 (1234567,89) |
number_format($amt,2,',','') → 長さチェック (≤ 15) |
| 口座番号・識別子 | スラッシュ / で開始し、改行で続く複数行 |
行頭スラッシュが必須かつ行長 ≤ 35 文字 |
| Charges コード | SHA, BEN, OUR のいずれか |
列挙型(enum)で管理し、入力時に選択肢限定 |
実装例(PHP)
|
1 2 3 4 5 6 7 8 |
function validateTag20(string $ref): bool { return preg_match('/^[A-Z0-9]{1,16}$/', $ref) === 1; } function formatAmount(float $amt): string { $str = number_format($amt, 2, ',', ''); return str_pad($str, 15, '0', STR_PAD_LEFT); // 必要に応じて左詰め } |
4️⃣ CSV 変換のベストプラクティス(ブランド非依存)
多くの銀行が内部システム間で MT103 データを CSV に落とし込む際、以下の共通仕様が採用されています。
| 項目 | 推奨設定 |
|---|---|
| 区切り文字 | カンマ , |
| テキスト囲み | ダブルクオート "(内部の " は "" とエスケープ) |
| 改行コード | CR + LF (\r\n) |
| 空白処理 | 前後空白は必ずトリム。空白が残るとバイト長不一致になる可能性あり |
| 数値フォーマット | 先頭ゼロを保持(例:"00123")。整数として扱わないように注意 |
CSV 変換チェックリスト
- タグ順序の固定化
-
必須タグは常に同一列に配置(:20:, :23B:, :32A:, …)し、欠落があれば空文字で埋める。
-
エスケープ処理
-
"を含むフィールドは""に置換後、全体を" "で囲む。 -
数値・日付のパディング
-
月・日は必ず 2 桁 (
05) 、金額は左側にゼロ埋め(最大桁数まで)。 -
バイト長検証
-
行単位で総バイト数を算出し、仕様書の上限と比較。超過または不足はエラーとしてログへ。
-
最終改行
- ファイル末尾に必ず CR + LF を付与。システムによっては LF のみでは受け付けない。
変換サンプル(テキストエディタで確認できる形)
|
1 2 3 4 5 6 7 |
":20:","20230429ABC12345" ":23B:","CRED" ":32A:","240531USD1234567,89" ":50K:","/123-4567890\nJohn Doe\n1-2-3 Example St., Tokyo" ":59:","/987654321\nACME Corp.\n45 Business Rd., New York" ":71A:","SHA" |
※ \n は実際の CSV では改行文字(CR + LF)に置き換えてください。
5️⃣ よくあるバリデーションエラーと予防策
| エラー種別 | 発生原因 | 事前対策 |
|---|---|---|
必須タグ欠落 (:32A: が未入力) |
テンプレート不備・手作業ミス | メッセージ生成時に必須タグリストを自動走査し、欠如時は例外を投げる |
日付形式エラー (2023-05-01) |
ISO 8601 表記のまま流用 | 正規表現 ^\d{6}$ で検証し、フォーマット関数で変換 |
金額区切りミス (1234.56) |
小数点をピリオドにしたまま出力 | 金額は必ず number_format($amt,2,',','') に統一 |
先頭ゼロ除去 (5 → 05) |
CSV 出力時に整数型で処理 | 文字列として扱い、sprintf('%02d',$value) で 2 桁固定 |
| 全角文字混入 (例:カタカナ) | 日本語入力がそのまま残る | 入力段階で iconv により ASCII へ変換、非対応文字はエラーログに記録 |
実務的なヒント
- テンプレート駆動:必須タグと順序を JSON/YAML で定義し、生成ロジックがそれに従う形にすると変更管理が楽になります。
- CI/CD の活用:メッセージ作成バッチのビルド時に単体テストとして「全必須タグが存在するか」「フォーマットが正しいか」を自動検証します。
6️⃣ シナリオ別メッセージ選択指針
| 業務シナリオ | 推奨メッセージ | 理由 |
|---|---|---|
| 単一顧客の代金支払 (例:輸入業者への支払い) | MT103 | 1 件ごとの明細が必須で、トレーサビリティが重要。 |
| 給与・ボーナス等の大量振込 | MT102(または ISO 20022 の pacs.008) |
バッチ処理に最適。個別エラーはまとめて返却される点に留意。 |
| 信用状付貿易決済 | MT103 + 追加タグ (:70:、:71B: 等) |
商品情報や条件が必要なため、拡張タグで補完。 |
| リアルタイム決済(国内外) | ISO 20022 系 pacs.008 が主流だが、SWIFT ネットワーク上では MT103 でも対応可能 |
将来的なシステム統合を見据えて、ISO 20022 の採用計画を検討。 |
7️⃣ まとめ ― 実務で即活かせるチェックリスト
- ブロック構造と必須タグ を把握し、特に Block 4 の
:20:・:23B:・:32A:・:50K/F:・:59:・:71A:を漏れなく記述。 - 文字セット・長さ・フォーマット(日付・金額)は ASCII、固定桁数で統一し、正規表現や関数で事前検証。
- CSV 変換 は「ダブルクオート+カンマ区切り+CR + LF」の共通仕様に従い、空白・先頭ゼロの除去に注意。
- バリデーションエラー対策 としてテンプレート駆動と自動テストを導入し、エラー発生を未然に防止。
- シナリオ別メッセージ選択 を業務フローに合わせて適切に行い、MT103 と MT102(または ISO 20022)の使い分けを明確化。
これらのポイントを実務プロセスに組み込めば、国際送金における MT103 の作成・検証が効率的かつ高信頼で行えるようになります。ぜひ本稿のチェックリストとサンプルコードをご活用ください。