了解ISO 8583消息传递日志

时间:2011-11-03 06:26:17

标签: iso8583

我在WIKICode Project阅读了有关ISO 8583消息传递的内容。我理解ISO 8583消息基本上可以分为3部分:

  1. MTI(消息类型指示符)
  2. 1.1。版本

    1.2。消息类

    1.3。消息功能

    1.4。消息来源

    1. 位图
    2. 指出存在哪些数据元素。

      1. DataElement
      2. 整个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留言和欢迎建议的经验。

3 个答案:

答案 0 :(得分:12)

知道了,
此消息分为以下几部分:

前2个字节是消息长度00 5B = 91
后跟14个字节的头= 01100000000820

左翼BMP如下:

  • 主要BMP = 80 38 00 00 00 81 00 00 =字段{1,11,12,13,41,48}存在
    字段1表示存在二级BMP
  • 辅助BMP = 04 00 00 00 00 00 00 00 =字段70存在

我不确定MTI在哪里,它会是标题预告片中的0820吗?因为它是ASCII格式,通常它的数值为08 20,但这可能是规格的一部分。 0820表示网络管理建议

无论如何,解码后的BMP中的字段如下:

  • DE 11 = 362910
    系统跟踪审核编号
  • DE 12 = 102957
    本地交易时间hh(24)mmss
  • DE 13 = 1031
    本地交易日期MMDD
  • DE 41 = 10000005
    终端ID
  • DE 48 =(031)SU20111031102957201110311029573 注意该字段中剩余数据之前的3位长度字段。这是一个通用(未来/私人使用)字段
  • DE 70 = 001
    网络管理信息代码< 001 =登录>

从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>

以上示例可在GitHub https://github.com/credibledoc/credible-doc/blob/master/iso-8583-packer/src/test/java/com/credibledoc/iso8583packer/examples/UnderstandingIso8583MessageLogTest.java

上找到

BMP 55通常包含TLV EMV数据。 https://paymentcardtools.com/emv-tlv-parser工具在这种情况下很有用。