⇧ Oh, my gosh...
まぁ、ポンコツな回答をすることの多いAIモデルが、こういう回答に限って高精度な回答を返すとしたら、深刻なわけだけど、どうなんだろう?
ISO 8583とは?
Wikipediaさんによりますと、
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)
- どのデータエレメントが存在するかを示すためのビットマップ
- メッセージフィールドのデータエレメント
⇧ とありますと。さらっと、
『ISO 8583での標準のメッセージ形式は、各ネットワークやシステムではそのまま使用されていない。各ネットワークは、ISO 8583の形式をそれぞれカスタマイズして使用している。』
と説明されているのが怖すぎるんだが...
ISO 8583と現場の実装の乖離が暗黙知過ぎて初見殺し過ぎる問題
ちょっと、耳を疑ったのが、
謎の「業界の通例」に悩んだこともあったそうだ。「ApprovalCodeは、仕様では『6桁の英数字』と規定されているけれど、対向試験を行ったら『ApprovalCodeに英字が混ざっています。普通は数字ですよ』と言われて……そもそも『普通』って何だろうと(苦笑)。仕様で許可されていても、業界の通例というものがあると知りました」(佐野氏)
クレジットカード処理を担う「ISO8583」とは? Go言語でパーサーを開発したエンジニアが中身と苦労を明かす:謎の「業界の通例」があるカード決済の仕組み - @IT
⇧ 現場は仕様を無視しているというね...
仕様を正解とできない世界線は辛過ぎるんだが...
仕様の存在意義って一体...
ISO 8583の電子メッセージのIF(インタフェイス)の構造など
基本的には、
⇧ 上図のような構造になっているようなので、「Data Element」の部分の項目や構造が、電子メッセージの種類によって変わってくるということだと思われる。
で、「Bitmap」の値によって、「Data Element」が決まってくるらしく、
⇧ 16進数で2桁ずつで確認していく感じになるっぽい。
Wikipediaによると、
メッセージには「プライマリ・ビットマップ」と呼ばれるビットマップが必ず含まれる。それはデータエレメントのうち、フィールド1から64までの存在有無を示すビットマップである。セカンダリ・ビットマップが存在する場合は、一般的にフィールド1のデータエレメントの値に設定され、フィールド65から128までの存在有無を示す。同様に、サード・ビットマップは、フィールド129から192までの存在有無を示すものだが、あまり使用されない。
⇧ とあるので、
No | ビットマップ | bit位置 | 内容 |
---|---|---|---|
1 | プライマリ・ビットマップ | 1bit~64bit | フィールド1から64 |
2 | セカンダリ・ビットマップ | 65bit~128bit | フィールド65から128 |
3 | サード・ビットマップ | 129bit~196bit | フィールド129から196 |
という感じで、ビットマップのbitが1になっているフィールドが有効になるらしいのだけど、フィールドについて、Wikipediaでは、「セカンダリ・ビットマップ」までしか記載してくれていない。
参考サイト様によりますと、
⇧「Bitmap」の値が1になっているものが、2、3、4、7の場合は、「Data Element」は4つのフィールドで構成されると。
Wikipediaの情報によると、
⇧「属性」の部分で、
- データ型
- サイズ
- 固定長か可変長か
を確認する感じになると。
ただ、Wikipediaの情報だと、
⇧ 上記サイト様の説明にあるような肝心の「表現」が分からない...
二進化十進数 (BCD、Binary-coded decimal ) とは、コンピュータにおける数値の表現方式の一つで、十進法の1桁を、0から9までを表す二進法の4桁で表したものである。「二進化十進符号」などとも呼ばれる。3増し符号など同じ目的の他の方式や、より一般的に、十進3桁を10ビットで表現するDensely packed decimalなども含めることもある。
⇧「二進化十進数(BCD:Binary Coded Decimal)」という、かなり特殊な値なんですな。
だから、参考サイト様のように、「Bitmap」で「Data Element」のフィールドが存在するか確認して、フィールドが存在する場合は、パース処理が必要と。
う~む、とりあえず、ISO 8583で扱うことのできる電子メッセージの構造と全量が載ってるドキュメントが欲しいですな...
特に、肝心の「表現」の部分が分からないと、どうパースすれば良いか分からんですからな...
まぁ、一番の問題は、
国際標準化機構(こくさいひょうじゅんかきこう、英: International Organization for Standardization、仏: Organisation internationale de normalisation、露: Международная организация по стандартизации)、略称: 英・仏:ISO(アイエスオー、イソ、アイソ)露:ИСОは、各国の国家標準化団体で構成される非政府組織である。
スイス・ジュネーヴに本部を置く、スイス民法による非営利法人である。1947年2月23日に設立された。国際的な標準である国際規格 (IS : international standard / norme internationale) を策定している。
文書の著作権
ISOの文書は著作権で保護されており、その複写には料金がかかる。ただし、電子形式の暫定文書のほとんどに対しては、料金が請求されることはない。それらは有用ではあるが、標準として確定する前に大幅に変更される可能性があるので、暫定文書の使用には注意を払わなければならない。
⇧とのことなんだけど、ドキュメントが有料なんよね...
いや、全く広める気が無いやん...
本当に、頭悪過ぎるんだが...
毎度モヤモヤ感が半端ない...
今回はこのへんで。