ISO8583报文手工拆解
8583报文大部分情况下用在POS终端与后台收单系统的数据交换,一般情况下一段完整的报文由以下几个部分组成:
——————————————————————————————————
长度 报文头 8583数据
——————————————————————————————————
长度部分一般两个字节,表示报文的总长度。(“报文头”+“数据”,部分的长度)
TPDU决定了终端与系统之间的网络协议。TPDU是一个10位的数字。
实际传输的报文,有些用ASCII码表示,有些用BCD码表示。
下面来段简单的报文,我给大家详细的解析一下(根据中国银联POS终端规范)
——————————————————————————————————
005f600003000200302044c020c08810210009000000000001005018998802100006
377689200010172645673d130820147800000000303130303030313230313130303
030303130303030303131353626000000000000000011260001100000
——————————————————————————————————
<00 5f>
报文总长度 95字节
<60 00 03 00 00>
TPDU
<02 00>
这个是信息类型(MTI),是一个四位的数字,这里为“0200”(请求)
传输时用BCD码表示即为“02h 00h”, 每位都有它的意义
第一位:8583 version number
第二位:message class
第三位:message sub-class
第四位:transction originator
下面开始位图的详细解释:
<30 20 44 c0 20 c0 88 10>
bitmap域, 指示哪些域的存在 位图包括基本位图和扩展位图
位图利用BCD码分析。把BCD码的那一位置 “1”,就表示有哪些域。
解析位图如下:
0011000000100000010001001100000000100000110000001000100000010000
这个你就自己数的看吧。解析出来的域有:3,4,11,18,22,25,26,35,41,42,49,53,60。
接下来就是对应每个域的属性,开始对应相应的数据。
<21 00 09>
field 3, 交易处理码,n6, 定长, 用3个字节的BCD码表示。
<00 00 00 00 00 01>
field 4, 交易金额, n12, 定长, 用6个字节BCD码表示,这里金额是0.01元
若为人民币则交易金额的单位是人民币的分。
<00 50 18>
field 11, 流水号, n6, 定长, 用3字节的BCD码表示, 流水号为“005018”。
<99 88>
field 18, 商户类型,n4, 定长,用2字节的BCD码表示。 (商户类型代码行业查询)
<02 1>
field 22, 服务点输入方式, n3, 定长, 在服务终端定义PIN和PAN的输入方式。
<00>
field 25, 服务点条件代码, n2, 定长, 00表示正常交易
<06>
field 26, 服务点PIN获取码,n2,定长,该域描述了服务点设备所允许输入的个人密码明文的最大长度。
<37 76 89 20 00 10 17 26 45 67 3d 13 08 20 14 78 00 00 00 00>
field 35, 二磁道数据, z..37(LLVAR), 第一个字节表示域的长度(37)
后面19个字节BCD码表示磁道数据,基数位补0或者跳过。
<30 31 30 30 30 30 31 32>
field 41, 终端号, ans8, 定长,ASCII码表示;这里终端号为:“01000012”。
<30 31 31 30 30 30 30 30 31 30 30 30 30 30 31>
field 42, 商户号,ans15, 定长, ASCII码表示;这里的商户号为:“011000001000001”
<31 35 36>
field 49, 货币代码,ans3,定长, ASCII码表示;人民币的代码为:“156”。
<26 00 00 00 00 00 00 00>
field 53, 安全控制信息,n16, 有安全要求时必选
<00 11 26 00 01 10 00 00>
field 60,自定义域, an..011(LLLVAR);两个字节表示长度(00 11),左补齐“0”。
ISO8583报文拆解代码见下期。