ISO 8583

ISO 8583は、国際標準化機構が金融取引カード始発メッセージを定めたもので、カード所有者が支払手段にカードを使用した場合に発生する電子メッセージの標準規格である。以下の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).
MTIは、メッセージの種類を分類する4桁の数値フィールドである。MTIには、メッセージクラス・メッセージ機能、メッセージの発生源の情報が、1桁毎に設定されている。以下の例 (MTI 0110) に、各桁があらわす内容を記載する。
 0xxx → ISO 8583の版（1987年版）
 x1xx → メッセージクラス（オーソリメッセージ）
 xx1x → メッセージ機能（要求に対する応答）
 xxx0 → 手順の発生源（アイワイアラ）
ISO 8583の版.
MTIの1桁目には、このメッセージがどのISO 8583標準バージョンを使用しているかを指定する。
メッセージクラス.
MTIの2桁目には、メッセージの全体的な目的を指定する。
メッセージ機能.
MTIの3桁目には、メッセージをシステム内のどこまで保証しなければならないかを指定する。要求の両端（例えばアクワイアラからイシュア（カード発行会社）で、タイムアウトが発生した場合は自動取消をその範囲で行う）や、アドバイス（端末からアクワイアラ、アクワイアラからネットワーク、ネットワークからイシュア間を保証する）を指定する。
メッセージ発生源.
MTIの4桁目には、メッセージの一連のトランザクションの発生源を指定する。
MTI一覧.
MTIの4桁の値で、そのメッセージが何のためのメッセージであるか、ネットワークのどの範囲までのものかを指定される。なお、ISO 8583を使用しているすべてのシステムで、MTIの意味を全く同じに解釈しているとは限らないが、以下にMTI値の例を示す。
ビットマップ.
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は存在しないことを示す。
ビットマップの設定例.
ビットマップの例（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で標準化されている内容と使用している各システムでは実際には若干異なっており、システム特有・国特有の多目的なデータエレメントが含まれる。
各データエレメントは、以下の表で記載される属性（値や長さ）で記述される。
各フィールドは、固定長である場合と可変長の場合がある。可変長であれば、値の前に実際の長さが設定される。