报文解析学习——8583设计原理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8583报文设计原理
ISO8583报文(简称8583包)又称8583报文是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。
8583包前面一段为位图,用来确定包的字段域组成情况。其中位图是8583包的灵魂,它是打包、解包确定字段域的关键。而了解每一个字段域的属性则是填写数据的基础。
POS终端上送POS中心的消息报文结构包括TPDU、报文头和应用数据三部分:
——TPDU说明:长度为10个字节,压缩时用BCD码表示为5个字节长度的数值。——报文头说明:总长度为12字节,压缩时用BCD码表示为6个字节长度的数值。
——应用数据说明:一般长度都是4个字节,压缩时用BCD码表示为2个字节的长度的数值。
所以,
上述报文中前五个字节为TPDU,即60 00 03 00 00 (红线标注)
报文头占用六个字节,即60 31 00 31 07 30 (蓝线标注)
应用数据占用两个字节,即02 00 也就是"0200"。应用数据部分指定消息类型(例如余额查询、消费等交易等消费类型)(黑线标注)
应用数据之后的若干个字节表示位图。
首先取第十四个字节,即0x30,转化为二进制00110000,在该字节的第一位为0(从左往右)表示当前报文中只需要包括64个域(用8个字节表示),也就是从当前字节开始连续8个字节为位图(包括当前字节),如果要包括128个域(用16个字节表示),该位为1。
《1》位图分析:(bit map 域指定了哪些域存在。域是从1开始的)
取表示位图的8个字节即30 20 04 C0 20 C0 98 11转化为二进制为:
00110000 00100000 00000100 11000000 00100000 11000000 10011000 00010001
位图中为1的位置即代表相应的域,在上面的二进制位中从左往右有第3位、第4位、第11位、第22位、第25位、第26位、第35位、第41位、第42位、第49位、第52位、第53位、第60位、第64位。
《2》具体对域进行分析
3域。查看银联规范可知,3域为交易处理码,压缩成BCD码后占定长3个字节(参考银联规范可知)。从位图所占的8个字节以后(第22个字节)开始连续取3个字节,即00 00 00
解压后即为“000000”,具体代表的含义可以参考中国银联规范的第八节消息域说明。
4域为交易金额,压缩成BCD码后占定长6个字节,同理(从上文3域的三个字节以后开始)取六个字节,即00 00 00 00 00 01也就是金额为0.01元(如果币种为人民币,单位是人民币的分)
11域为受卡方系统跟踪号(流水号),压缩成BCD码占定长3个字节,同理取3个字节,即00 03 49,即000349。
22域为服务点输入方式码,压缩成BCD码占定长2个字节,同理取2个字节,即0210
由于22域本身只占3个字节,压缩时左靠,右补0,所以转换为“021”。
25域为服务点输入方式码,压缩成BCD码占定长1个字节,同理取1个字节,即00,转化为“00”,
“00”代表正常提交。
26域为服务点PIN获取码,压缩成BCD码占定长1个字节,同理取1个字节,即12,转换为“12”,表示服务点设备所允许输入的个人密码明文的最大长度为12.
35域不是定长,所以处理方法不同。先取一个字节,即30,转换为“30”,表示第二磁道的数据占用30个字节,取连续15个字节即62 25 82 21 12 99 63 01 5D 15 11 10 10 00 00。
41域为受卡机终端标识码,占8个字节的定长域,取35 36 38 35 32 33 31 34
42域为受卡方标识码,占15个字节的定长域,取32 33 35 32 31 34 35 32 36 38 35 39 32 33 36
49域为交易货币代码,占3个字节的定长域,取31 35 36。
52域为个人标识码数据,占8个字节的定长二进制数据,取C6 24 83 4D 36 7E 9E 9E
53域为安全控制信息,压缩成BCD码占8个字节定长域,取20 00 00 00 00 00 00 00
60域为自定义域,为不定长域,先取长度(压缩成BCD码占两个字节),即00 13,转换为13。表示在60域占13个字节,压缩成BCD码占7个字节,取22 00 00 08 00 05 00
64域为报文鉴别码,占定长8个字节,取最后8个字节36 37 41 32 32 39 39 41
除了上述的分析以外,有些系统采用的报文数据会有细微的区别,下面举例说明。
注意:a、有些报文数据中最开始部分会包含一个“长度”的指定。该长度指定了tpdu、报文头、应用数据、位图……等的所有报文数据总共包含的字节数。
举例:列举一段报文数据如下,
------------------ 接收数据----------------------
00 5B 60 00 02 00 00 60 31 00 31 00 47 08 00 00
20 00 00 00 C0 00 16 00 00 81 32 35 38 35 36 33
39 35 31 32 33 34 35 38 35 36 39 38 35 36 36 35
35 00 11 00 00 00 01 00 30 00 29 53 65 71 75 65
6E 63 65 20 4E 6F 31 36 33 31 35 38 33 32 30 41
47 31 31 31 31 31 31 31 00 03 30 31 20
其中00 5B部分表示“长度”,一般占用两个字节,长度的两个字节在报文里面的表示方法因系统与终端的协议不同而不同。一般有两种方法:
(1)BCD方法, 比如报文的总长度是134字节, 那么在实际的报文中, 这两个字节为"01h,34h"(注意16进制)
(2)实际的计算的长度, 比如还是134长度的字节, 实际的报文中,两个字节为"00h, 86h"(注意也是16进制,00h*256+86h = 134d).《此处采用第二种方法》00H 5BH对应的十进制为91,表示报文总长度为91
b、TPDU部分决定了终端与系统之间的网络协议,实际传输的报文中,有些用ASCII表
示,有些用BCD表示。例如,
TPDU是"6000120000",
如果用ASCII表示, 报文中的字节是"36h,30h,30h,30h,31h,32h,30h,30h,30h,30h"(10 个字节).
如果用BCD表示, 报文中的字节如下:"60h,00h,12h,00h,00h"(5个字节).