8583报文解析(二)

参考 Demo:https://github.com/WTCool666/Iso8583/tree/master

一、【8583】ISO8583报文解析

ISO8583报文(简称8583包)又称8583报文,是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。

【报文格式】

POS终端上送POS中心的消息报文结构包括TPDU、报文头和应用数据三部分:

TPDU:长度为10个字节,压缩时用BCD码表示为5个字节长度的数值。

报文头:总长度为12字节,压缩时用BCD码表示为6个字节长度的数值。

在POS上送的请求/通知报文中,该数值由POS终端应用程序在打包上送时根据POS终端参数和当前状态填入应用类别、软件总版本号、终端状态和软件分版本号(具体指各厂商的程序版本号),用于POS中心根据数值进行相应的处理。
在POS中心返回的应答报文中,由POS中心填入处理要求,其他域保持原值返回,POS将根据收到报文头中的处理要求进行相应处理。

ISO8583Msg:信息类型域(2字节)+位图域(一般8字节,如果使用到65~128域则为16字节)+报文数据域。


在线16进制转2进制:https://www.jyshare.com/unit-conversion/7997/
16进制到ASCII字符串在线转换工具:https://coding.tools/cn/hex-to-ascii#google_vignette
【示例】

8583报文大部分情况下用在POS终端与后台收单系统的数据交换,一般情况下一段完整的报文由以下几个部分组成:

[长度(2字节)] + [TPDU(5字节)]+[报文头(6字节)]+[8583数据]

例如,一个demo报文报文:

005A 6000160000 602200000000 0200 7020000020C08000 19062051320000000261206000000000000200000000733706205132000000026120d191120100000000003030303031313131313032323530313533313131313131015600

报文长度:00 5A=90个字节

TPDU:60 00 16 00 00

Header:60 22 00 00 00 00

ISO8583Msg:信息类型0200 + 位图7020000020C08000+ 各域数据。

由位图数据可得域是 2 3 4 11 35 41 42,再看规范中的各域信息定义可知:

0111000000100000000000000000000000100000110000001000000000000000

2 3 4 11 35 41 42

Len: 005a
TPDU: 6005010000
Head: 602200000000
MsgType: 0200
BitMap: 7020000020c08000

[field:2] [len:19] [06205132000000026120]

[field:3] [600000]

[field:4] [000000020000]

[field:11] [000073]

[field:35] [len:37] [06205132000000026120d19112010000000000]

[field:41] [3030303031313131]

[field:42] [313032323530313533313131313131]

[field:49] [015600]

二、报文结构

8583报文=信息类型域+位图域+报文数据域

前面10个字节的BCD码(也就是20个BCD码,亦是20个数字)表示报头,在上面报文中报头是<02 00 70 20 00 00 20 C0 82 00>

其中前面四个数字表示 信息类型(MTI),上面报文的信息类型是<02 00>

后面的16个BCD码为 位图域。上面报文的信息类型是<70 20 00 00 20 C0 82 00>

后面N个数字表示报文数据

1、信息类型<02 00>

其中每位数字都有他的含义。不做翻译

第一位:8583 version number

第二位:message class

第三位:message sub-class

第四位:transaction originator

2、位图域<70 20 00 00 20 C0 82 00>

开头不为1,则表示64位的位图。

将上面的位图转换成二进制,为:

111000000100000000000000000000000100000110000001000000000000000

不足64位,前面补0,为:

0111000000100000000000000000000000100000110000001000000000000000

现在看是数了,能够看出2、3、4、11、 35、 41、 42、 49这些位置是1.则表示在8583报文中,的2、3、4、11、 35、 41、 42、 49域是传输了数据的。

3、报文数据域

在解读数据域之前,你应该先了解报文的数据类型和代表符

三、8583报文的相关知识

位:二进制中,一个0或1,表示位

Bcd码:四个位表示一个bcd码(可以理解成八进制数中1位)

字节:八个位表示个字节(可以理解成十六进制数中1位)

N…x 代表数字类型 x代表位数 …代表变长,若x为技术,则自动补0,凑足一个bcd码

N4:4位定长数字

N6:6位定长数字

N…6:6位变长数字

AN…x AN代表数字或字母,用ANSCII码解析,;x代表位数; …代表变长

AN4:4位定长数字或字符

AN6:6位定长数字或字符

AN…6:6位变长数字或字符

ANS 代表数字、字母或特殊字符,用ANSCII码解析

ANS4:4位定长数字或字符、特殊字符

ANS6:6位定长数字或字符、特殊字符

ANS…6:6位变长数字或字符、特殊字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值