ISO 8583は、国際標準化機構が金融取引カード始発メッセージを定めたもので、カード所有者が支払手段にカードを使用した場合に発生する電子メッセージの標準規格である。以下の3部で構成される。

- Part 1:メッセージ、データエレメントおよびコード値
- Part 2:機関識別コード (IIC) の応用および登録手順
- Part 3:メッセージ、データエレメントおよびコード値の保全手順

## 概要

カードを使用した場合、そのカードが使用できるかを確認するため、POS端末やATMなどのカードを読み取る機械から、ネットワークを経由して、カードを発行している会社(イシュア)のシステムまでメッセージは渡される。そのメッセージデータには、カードの情報(カード番号など)や端末の情報(店舗番号など)、業務情報(金額など)、システムによって加えられる情報などが含まれる。カードを発行しているシステムは、そのトランザクションを承認または拒否して端末へ送る応答メッセージを発生させる。

異なるシステムが上記のトランザクションを交わすことができるよう、ISO 8583はメッセージ形式とコミュニケーション・フローを定義している。客が店で支払をする際にカードを使用する場合や、ATMが使用される大多数の場合は、ISO 8583が使用されている。マスターカードやビザネットワークなど多くのネットワークは、信用照会業務はISO 8583をベースに手順を定められているが、ISO 8583にはルーティング情報がないため、TPDUヘッダが追加されている場合が多い。

ISO 8583には、カード所有者から発生するトランザクション(購入・取消・融資・返済・残高照会・口座変更)などや、セキュリティ・キー交換や、取引件数・金額の管理など、その他管理目的のための、システムメッセージ様式が定められている。

ISO 8583での標準のメッセージ形式は、各ネットワークやシステムではそのまま使用されていない。各ネットワークは、ISO 8583の形式をそれぞれカスタマイズして使用している。

ISO 8583の異なる版によって、各フィールドの使用方法が異なっている。例えば、1987年版と1993年版で使用されている通貨エレメントは、2003年版では使用されておらずそれぞれの金額項目のサブフィールドとして通貨を持つようになっている。ただし現在、ISO 8583の2003年版は、広く使用はされていない。

ISO 8583は、以下の内容で構成されている。

- メッセージタイプID (MTI)
- どのデータエレメントが存在するかを示すためのビットマップ
- メッセージフィールドのデータエレメント

## メッセージタイプID (MTI)

MTIは、メッセージの種類を分類する4桁の数値フィールドである。MTIには、メッセージクラス・メッセージ機能、メッセージの発生源の情報が、1桁毎に設定されている。以下の例 (MTI 0110) に、各桁があらわす内容を記載する。

### ISO 8583の版

MTIの1桁目には、このメッセージがどのISO 8583標準バージョンを使用しているかを指定する。

| 値 | 意味 |
| --- | --- |
| 0xxx | ISO 8583-1:1987年版 |
| 1xxx | ISO 8583-2:1993年版 |
| 2xxx | ISO 8583-1:2003年版 |
| 9xxx | 個社使用 |

### メッセージクラス

MTIの2桁目には、メッセージの全体的な目的を指定する。

| 値 | 意味 | 例 |
| --- | --- | --- |
| x1xx | オーソリ | 取引を承認するか、否認するかを決定する。デュアルメッセージシステム (DMS) のため、決済処理は行わない。 |
| x2xx | ファイナンシャル | 取引を承認する場合は、シングルメッセージシステム (SMS) のため、同時に決済・精算処理を行う。 |
| x3xx | ファイル更新 | カード情報などの更新を行う。 |
| x4xx | 取消 | オーソリの取消を行う。 |
| x5xx | 交換 | 処理件数等の更新情報を送信する。 |
| x6xx | 管理 | システム管理情報を送信する。例えば障害発生による取消メッセージなどで使用される。 |
| x7xx | 課金 |  |
| x8xx | ネットワーク管理 | セキュリティキー交換や、開局、エコー・テストなどのネットワーク処理で使用する。 |
| x9xx | ISO予約値 |  |

### メッセージ機能

MTIの3桁目には、メッセージをシステム内のどこまで保証しなければならないかを指定する。要求の両端(例えばアクワイアラからイシュア(カード発行会社)で、タイムアウトが発生した場合は自動取消をその範囲で行う)や、アドバイス(端末からアクワイアラ、アクワイアラからネットワーク、ネットワークからイシュア間を保証する)を指定する。

### メッセージ発生源

MTIの4桁目には、メッセージの一連のトランザクションの発生源を指定する。

### MTI一覧

MTIの4桁の値で、そのメッセージが何のためのメッセージであるか、ネットワークのどの範囲までのものかを指定される。なお、ISO 8583を使用しているすべてのシステムで、MTIの意味を全く同じに解釈しているとは限らないが、以下にMTI値の例を示す。

| MTI | 意味 | 例 |
| --- | --- | --- |
| 0100 | オーソリ要求 | カード会員が購入するためのPOS端末からの承認要求 |
| 0110 | オーソリ応答 | カード会員へ承認するためのイシュアからPOS端末への応答 |
| 0120 | オーソリアドバイス | POS端末が故障した場合など、承認しなければならない処理結果 |
| 0121 | オーソリアドバイスリピート | アドバイスでタイムアウト発生時 |
| 0130 | オーソリアドバイス応答 | オーソリアドバイスに対する受信結果 |
| 0200 | ファイナンシャル要求 | ATMやシングルメッセージシステムのPOS端末などから発生する決済要求 |
| 0210 | ファイナンシャル要求応答 | 決済要求に対するイシュアからの応答 |
| 0220 | ファイナンシャルアドバイス | たとえばホテルのチェックアウトなど、オーソリ要求から始まった一連のトランザクションの完了時に使用される |
| 0221 | ファイナンシャルアドバイスリピート | アドバイスでタイムアウト発生時 |
| 0230 | ファイナンシャルアドバイス応答 | ファイナンシャルアドバイスに対する受信結果 |
| 0400 | 取消要求 | トランザクションの取消 |
| 0420 | 取消アドバイス | 取消が発生した結果の通知 |
| 0421 | 取消アドバイスリピート | アドバイスでタイムアウト発生時 |
| 0430 | 取消応答 | 取消アドバイスに対する受信結果 |
| 0800 | ネットワーク管理要求 | エコーテスト、開局、閉局など |
| 0810 | ネットワーク管理応答 | エコーテスト、開局、閉局など |
| 0820 | ネットワーク管理アドバイス | キー交換 |

## ビットマップ

ISO 8583内のビットマップは、メッセージ内にどのデータエレメントが存在するかを示すためのフィールド/サブフィールドである。

メッセージには「プライマリ・ビットマップ」と呼ばれるビットマップが必ず含まれる。それはデータエレメントのうち、フィールド1から64までの存在有無を示すビットマップである。セカンダリ・ビットマップが存在する場合は、一般的にフィールド1のデータエレメントの値に設定され、フィールド65から128までの存在有無を示す。同様に、サード・ビットマップは、フィールド129から192までの存在有無を示すものだが、あまり使用されない。

ビットマップは、8バイトのバイナリデータや、16進数の文字(0-9, A-F のASCIIまたはEBCDICコード)で示される。

特定のビットが立っている場合のみ、該当のフィールドが存在する。たとえば、'82x は2進数で '1000 0010' であるため、フィールド1と7のみ存在し、2, 3, 4, 5, 6, 8は存在しないことを示す。

### ビットマップの設定例

| ビットマップ | 存在フィールド |
| --- | --- |
| 4210001102C04804 | フィールド 2, 7, 12, 28, 32, 39, 41, 42, 50, 53, 62 |
| 7234054128C28805 | フィールド 2, 3, 4, 7, 11, 12, 14, 22, 24, 26, 32, 35, 37, 41, 42, 47, 49, 53, 62, 64 |
| 8000000000000001 | フィールド 1, 64 |
| 0000000000000003 (セカンダリ・ビットマップ) | フィールド 127, 128 |

ビットマップの例(8バイトのプライマリ・ビットマップ = 64ビット)フィールド 4210001102C04804
BYTE1 : 01000010 = 42x(左から2番目と7番目のビットが1のため、フィールド2と7が存在することを示す)
BYTE2 : 00010000 = 10x(フィールド12が存在)
BYTE3 : 00000000 = 00x(フィールドは存在しない)
BYTE4 : 00010001 = 11x(フィールド28と32が存在)
BYTE5 : 00000010 = 02x(フィールド39が存在)
BYTE6 : 11000000 = C0x(フィールド41と42が存在)
BYTE7 : 01001000 = 48x(フィールド50と53が存在)
BYTE8 : 00000100 = 04x(フィールド62が存在)

上記内容で存在するフィールド
2-7-12-28-32-39-41-42-50-53-62

## データエレメント

データエレメントは、そのトランザクションの情報を構成する個々のフィールドである。ISO 8583:1987でデータエレメントは最大128フィールド制定され、後に192フィールドまで拡張された。1993年での改訂ではメッセージ形式そのものは変わっていないが、新しい定義が加えられたのと同時に多少の削除があった。

それぞれのデータエレメントには意味とフォーマットが指定されているが、ISOで標準化されている内容と使用している各システムでは実際には若干異なっており、システム特有・国特有の多目的なデータエレメントが含まれる。

各データエレメントは、以下の表で記載される属性(値や長さ)で記述される。

| 属性 | 意味 |
| --- | --- |
| a | 英字(ブランクを含む) |
| n | 数字のみ |
| s | 特殊文字のみ |
| an | 英字または数字 |
| as | 英字または特殊文字 |
| ns | 数字または特殊文字 |
| ans | 英字、数字、特殊文字 |
| b | バイナリデータ |
| z | ISO/IEC 7813 と ISO/IEC 4909 で定義されたトラック2・トラック3のコード値 |
| . / .. / ... | 長さが可変であることを示す。 |
| x / xx / xxx | 固定長の桁数 または 可変長の最大桁数 |

各フィールドは、固定長である場合と可変長の場合がある。可変長であれば、値の前に実際の長さが設定される。

| 属性 | 意味 |
| --- | --- |
| Fixed | 桁数フィールドは使用しない |
| LLVAR / (..xx) | LLが100未満の場合は、2桁の桁数を指定する |
| LLLVAR / (...xxx) | LLが100未満の場合は、3桁の桁数を指定する |
| LL/LLLは、16進数またはASCII。桁数フィールドはASCIIの時に限り圧縮することができる。 | LLは1バイトまたは2バイトである。16進数の1バイトとして圧縮する場合は、'27x は27バイトのフィールド値が後続することをあらわす。ASCII 2バイト '32x '37x が指定された場合も、同様に27バイトのフィールド値が後続することをあらわす。ASCIIで3桁フィールドの桁数を指定する場合、先頭の'0'を省略して2バイトであらわす場合もある。 |

### 属性の例

| フィールド属性値 | 意味 |
| --- | --- |
| n6 | 6桁の固定長数字フィールド |
| n.6 | 最大6桁の可変長数字フィールド |
| a..11 | 最大11桁の可変長英字フィールド |
| b...999 | 999バイトのバイナリフィールド |