10

我在WIKICode Project上阅读了有关 ISO 8583 消息传递的信息;我了解 ISO 8583 消息基本上可以分为 3 个部分:

  1. MTI(消息类型指示器)

1.1。版本

1.2. 消息类

1.3. 消息功能

1.4. 消息来源

  1. 位图

指出存在哪些数据元素。

  1. 数据元素

整个 ISO 消息的本质,包含有关事务的信息,例如:

  • 交易类型,

  • 数量,

  • 客户ID等

因此,在阅读了这两个 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、位图和数据元素。

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 消息的经验,欢迎提出建议。

4

3 回答 3

15

明白了,
这条消息分为如下:

前 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 含义的更多信息,您应该阅读此设备的手册(技术规格)以获取更多信息。

于 2011-11-10T05:32:13.933 回答
5

在发送 ISO 8583 消息时,我们将其转换为 BCD/HEX 格式,使用 Wireshark 工具

跟踪 IP 和端口之间的通信。

于 2013-06-18T07:16:17.860 回答
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工具在这种情况下很有用。

于 2020-01-05T17:07:40.447 回答