我在WIKI和Code Project阅读了有关ISO 8583消息传递的内容。我理解ISO 8583消息基本上可以分为3部分:
1.1。版本
1.2。消息类
1.3。消息功能
1.4。消息来源
指出存在哪些数据元素。
整个ISO消息的本质,包含有关交易的信息,例如:
交易类型,
量,
customerid等
因此,在阅读了这两个Web引用之后,我想将我的ISO消息传递日志划分为MTI,位图和数据元素。
例如:
(0800 2020000000800000 000000 000001 3239313130303031)
MTI: 0800 (1987 version, Network Management Message, Request, Acquirer)
Bitmap: 20 20 00 00 00 80 00 00 (eg. 20 = 0010 0000 ,so position 3 is on)
DataElement:(by seeing Bitmap , we can defined data element as follow)
field 03:000000 (Processing Code)
field 11:000001 (Systems trace audit number)
field 41:3239313130303031 (Card acceptor terminal idenfication)
但我的挑战是我已经从我的ATM机上获得了ISO 8583消息日志。
这个实际的输出消息日志不像上面的代码片段那样清晰。
所以我不能将此消息分为MTI,Bitmap和Data元素,如上例。
00000:00 5B 30 31 31 30 30 30 30 30 30 30 30 38 32 30 80 38 00 00 [.[01100000000820.8..]
00020:00 81 00 00 04 00 00 00 00 00 00 00 33 36 32 39 31 30 31 30 [............36291010]
00040:32 39 35 37 31 30 33 31 31 30 30 30 30 30 30 35 30 33 31 53 [2957103110000005031S]
00060:55 32 30 31 31 31 30 33 31 31 30 32 39 35 37 32 30 31 31 31 [U2011103110295720111]
00080:30 33 31 31 30 32 39 35 37 33 30 30 31 [0311029573001 ]
我之前没有ISO 8583留言和欢迎建议的经验。
答案 0 :(得分:12)
知道了,
此消息分为以下几部分:
前2个字节是消息长度00 5B = 91
后跟14个字节的头= 01100000000820
左翼BMP如下:
我不确定MTI在哪里,它会是标题预告片中的0820吗?因为它是ASCII格式,通常它的数值为08 20,但这可能是规格的一部分。 0820表示网络管理建议
无论如何,解码后的BMP中的字段如下:
从DE 70值001开始,这是一条登录消息,必须是0800 MTI。
要获得有关MTI位置和DE 48含义的更多信息,请阅读本设备的手册(技术规格)以获取更多信息。
答案 1 :(得分:4)
发送ISO 8583消息时我们将其转换为BCD / HEX格式,使用Wireshark工具
跟踪IP和端口之间的通信。
答案 2 :(得分:0)
https://neapay.com/online-tools/bitmap-fields-decoder.html是一个不错的在线位图分析工具。
有时会帮助https://codebeautify.org/hex-string-converter工具。
为更好地理解ISO 8583消息格式,手动分析每个字段很有用。但是,每个字段可以具有不同格式(BCD,EBCDIC,ASCII ...)的长度和值子字段。并且某些字段可能具有内部字段,例如BMP 48或60通常用作嵌套字段树的容器。这些内部字段可能具有标签,长度和值。这些字段的嵌套字段可能再次具有不同的格式:)。例如,https://github.com/credibledoc/credible-doc/blob/master/iso-8583-packer/doc/ebcdic/ebcdic-decimal-tag-packer.md页描述了一个带有EBCDIC标签和BCD值的字段。
您可以使用https://github.com/credibledoc/credible-doc/tree/master/iso-8583-packer Java库(我是作者)来构建ISO 8583消息。上面的ISO消息示例可以使用iso-8583-packer库解压缩并打包。
消息数据:
<f name="Root" lenHex="005B">
<f name="Header" val="0110000000" valHex="30313130303030303030"/>
<f name="MTI" val="0820" valHex="30383230"/>
<f name="Bitmap" bitmapHex="80380000008100000400000000000000" bitSet="{1, 11, 12, 13, 41, 48, 70}">
<f name="SystemTraceAuditNumber" fieldNum="11" val="362910" valHex="333632393130"/>
<f name="LocalTransactionTimeHHMMSS" fieldNum="12" val="102957" valHex="313032393537"/>
<f name="LocalTransactionDateMMDD" fieldNum="13" val="1031" valHex="31303331"/>
<f name="TerminalId" fieldNum="41" val="10000005" valHex="3130303030303035"/>
<f name="PrivateData_48" fieldNum="48" val="SU20111031102957201110311029573" lenHex="303331" valHex="53553230...39353733"/>
<f name="NetworkManagementInformationCode" fieldNum="70" val="001" valHex="303031"/>
</f>
</f>
消息结构:
<f type="LEN_VAL" name="Root" lengthPacker="BinaryLengthPacker" bodyPacker="AsciiBodyPacker">
<f type="VAL" name="Header" bodyPacker="AsciiBodyPacker" len="10"/>
<f type="VAL" name="MTI" bodyPacker="AsciiBodyPacker" len="4"/>
<f type="BIT_SET" name="Bitmap" bitMapPacker="IfbBitmapPacker">
<f type="VAL" fieldNum="11" name="SystemTraceAuditNumber" bodyPacker="AsciiBodyPacker" len="6"/>
<f type="VAL" fieldNum="12" name="LocalTransactionTimeHHMMSS" bodyPacker="AsciiBodyPacker" len="6"/>
<f type="VAL" fieldNum="13" name="LocalTransactionDateMMDD" bodyPacker="AsciiBodyPacker" len="4"/>
<f type="VAL" fieldNum="41" name="TerminalId" bodyPacker="AsciiBodyPacker" len="8"/>
<f type="LEN_VAL" fieldNum="48" name="PrivateData_48" lengthPacker="AsciiLengthPacker" bodyPacker="AsciiBodyPacker"/>
<f type="VAL" fieldNum="70" name="NetworkManagementInformationCode" bodyPacker="AsciiBodyPacker" len="3"/>
</f>
</f>
上找到
BMP 55通常包含TLV EMV数据。 https://paymentcardtools.com/emv-tlv-parser工具在这种情况下很有用。