ISO8583报文是金融行业通讯经常需要用到的报文格式,刚开始接触时不知道如何去对它进行分析。
一般在我们分析8583报文的时候,都会参考报文格式的文档。没有这个文档,也无从分析。一般情况下,每个单位都会有自己的8583报文格式,那么笔者放上银联的签到业务报文格式参考来示意,一来银联规范格式是基础,二来避免不必要的麻烦。
1. 阅读报文格式文档(银联规范)
比如我下面分析签到返回报文,就参考表中的“响应”这一列。标有“M”的则是必须返回的域。“类型”表明了返回域的字码类型,而且这个要和字码长度结合一起看。比如批次号这一行,n6,BCD表明是BCD码,长度为6。报文都是16进制表示的,所以这里表明BCD码长度为6,而在报文中要数12位(这里的位非bit,就是一个数字的意思)。
原因是一个BCD展开成2个十六进制。比如字符“19”在内存中存储的是ASCII码,即“0x31”“0x39”,占用2个字节。它表示为压缩BCD码就是“0x19”,占用一个字节。
2. 原始报文
原始的报文如下:
004860000000070810203800000a801810000000000125112638061733313638323630303
0313235303030303030353132367955a92f09e34c36f40379ab9e0ec5330006313030303038
报文的获取可以在收到报文包的时候打印出来,或者直接通过TCPDUMP获取。
3. 报文解读
前面2字节 0048 表示的是报文长度 0x48 == 72D
6000000007 这个是TPDU
0810 就是文档中的消息码
203800000a801810 16位数的bitmap,这个牛X了,直接指明了报文中包含那几个域
可以用工具看看
后面的就根据bitmap和文档中分析好了,我把分析结果贴在下面:
0048 //长度
6000000007 //TPDU
0810 //消息码
203800000a801810 //bitmap
000000 //系统码
000125
112638 //时间
0617 //日期
333136383236303030313235
3030 //返回码
3030303035313236 //商户号
7955a92f09e34c36 //终端号
f40379ab9e0ec533
0006 313030303038 //批次号
联系客服