码迷,mamicode.com
首页 > 其他好文 > 详细

8583协议实例分析

时间:2014-10-27 21:26:29      阅读:1499      评论:0      收藏:0      [点我收藏+]

标签:银行协议   8583   8583协议   iso8583   

ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。 8583包前面一段为位图,用来确定包的字段域组成情况。其中位图是8583包的灵魂,它是打包解包确定字段域的关键,而了解每个字段域的属性则是填写数据的基础。

位图描述如下:

位图位置:1

格式:定长

类型:B16(二进制16位,16*8=128bit

描述:如将位图的第一位设为‘1‘,表示使用扩展位图(128个域),否则表示只使用基本位图(64个域)。如使用某数据域,应在位图中将相应的位设位‘1‘,如使用41域,需将位图的41位设为‘1‘

从第二域开始则为数据包的数据域,数据域不一定是每一个域都有值,数据域是否有值是由位图域来决定的。以银联的消费交易为例,下面来解析一段报文:60001300006022000000000200302004C030C198011900000000000049251631180210001237622848299836XXXXXXXD23122209656980000F010499622848299836XXXXXXXD156156000000000000000000000021414142312DD000000000000D000000000000D0023813000000003635393030333139383938363539303438313430303033010350414333313330303030303030303020202020202020202031313030303031333030303030303030302020202020202020203130313030383035343031303631343130323731363331313832353133353935202020202020202020202020202020202020202023313536FD7FCC695E6083DC2000000000000000333A84758CBA943C

解析后的结果为:

TPDU= 6000130000

MSGHEAD= 602200000000

报文类型 = 0200

F000.位图 =016】【302004C030C19801

F003.交易处理码 =006】【190000

F004.交易金额 =012】【000000004925

F011.系统跟踪号 =006】【163118

F022.服务点输入方式码 =003】【021

F025.服务点条件码 =002】【00

F026.服务点PIN获取码 =002】【12

F035.第二磁道数据 =037】【622848299836XXXXXXXD23122209656980000

F036.第三磁道数据     =104】【99622848299836XXXXXXXD156156000000000000000000000021414142312DD000000000000D000000000000D002381300000000

F041.受卡机终端标识码 =008】【65900319

F042.受卡方标识码 =015】【898659048140003

F048.附加数据-私有 =103】【PAC313000000000         11000013000000000         10100805401061410271631182513595                    #

F049.交易货币代码 =003】【156

F052.个人标识码数据 =016】【FD7FCC695E6083DC

F053.安全控制信息  =016】【2000000000000000

F064.MAC = 008】【333A84758CBA943C

具体的解析步骤如下:TPDU为固定5个字节的长度,MSGHEAD为固定6个字节长度,接下来的两个字节为消息类型,0200代表消费请求交易。接下来的8个字节代表位图域,位图域的最高字节为0则代表该报文只用的了8583协议的前64个域,解析完8个字节的位图域302004C030C19801则能分析出3411222526353641424849525364域是有值的。

3域解析:第三域为属性为数字类型长度为6且组包类型为BCD压缩方式,故可以直接数6位即可,这样就解析出第三域的内容为190000

4域解析:第4域和第三域一样,唯一不同的是长度为12,故数12位,解析出来的内容为000000004925,注意此处的单位为分。

11域解析:第11域与第3域完全一样,故数6位即可,解析出来的内容为163118

22域解析:第22域属性为数字,长度为3,组包类型为BCD压缩方式,注意此处因为是BCD压缩的方式,故不能直接数3位了,此处要数4位,且去掉最后一位补的0,故解析出来的结果为021

25域解析:第25域和第三域一样,唯一不同的是长度为2,故数两位即可,解析出来的结果为00

26域解析:第26域和第25域完全一样,故数两位即可,解析出来的结果为12

35域解析:第35域为两位变长,分长度域和数据域,先分析长度域,长度域为2且组包类型为BCD码压缩方式,故数两位长度,长度值为37,根据长度域来解析该域的数据域,数据域的组包类型为BCD码压缩方式,故需要数48位,并去掉最后面在组包的时候补的F,故解析出来的结果为622848299836XXXXXXXD23122209656980000

36域解析:第36域为三位变长,分长度域和数据域,同样先分析长度域,长度域为3且组包类型为BCD码压缩方式,故数四位长度,长度值为0104,去掉最左侧在组包的时候补的0,故解析出来的长度域为104,根据长度域解析数据域,因为数据域的组包方式为BCD码压缩方式,故数104位即可,解析出来的结果为99622848299836XXXXXXXD156156000000000000000000000021414142312DD000000000000D000000000000D002381300000000

41域解析:第41域属性为字母数字特殊符号的组合,长度为8,组包方式为ASCII方式,故此处要数16位,此处数出值为3635393030333139,将ASCII转换为数字、字母、特殊字符后就变成解析结果,故此域的解析结果为65900319

42域解析:第42域与第41域相同,只是长度为15,故此处要数30位,解析的结果为898659048140003

48域解析:第48域为3位变长,故分数据域和长度域,长度域的解析跟36域的长度域解析方式一样,长度域解析结果为103,数据域的编码方式为ASCII,故此处要数206位,此处数出值为50414333313330303030303030303020202020202020202031313030303031333030303030303030302020202020202020203130313030383035343031303631343130323731363331313832353133353935202020202020202020202020202020202020202023,将此处的ASCII码转换为数字、字符、字母后的结果为PAC313000000000         11000013000000000         10100805401061410271631182513595                    #

49域解析:第49域跟第41域一样,不同的是此域的长度为3,故此处数6位,数出来的数据为313536,将ASCII转换为数字后,此域的解析结果为156

52域解析:第52域属性为二进制数据,长度为64,组包方式为二进制,所以此处数8位,解析出来的结果为FD7FCC695E6083DC

53域解析:第53域与第3域相同,长度为16,故数16位即可,所以此处解析出来的结果为2000000000000000

64域解析:第64域与第52域完全一样,故解析出来的结果为333A84758CBA943C

       至此该数据包解析完成,特别说明一下,此数据是从生产环境的日志中取的报文,其中包含用户银行卡的二三磁道数据等敏感信息,故此处对报文进行了处理,该处理是将卡号后七位影藏为XXXXXXX,也就是上面红色的XXXXXXX部分,但此处的处理不影响此处对报文解析的理解。

8583协议实例分析

标签:银行协议   8583   8583协议   iso8583   

原文地址:http://blog.csdn.net/kxd_ysheng/article/details/40512551

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!