ISO8583是国际标准包格式的通讯协议,最多由128个字段域组成,每个字段域都有统一的规定,常用语我们Pos机的通信中使用。
报文组成:
报文头【长度(2字节)+TPDU(5字节)+报文版本号(2字节)】+ 信息类型 + 位图 + 数据
TPDU(TPDU决定了终端与系统之间的网络协议): 6000100000
报文版本号:0100
信息类型:0080
报文长度:整体报文长度 -报文头中的2字节长度。如8583整体报文长度为100,那么报文长度为98.用两字节的BCD码表示(16进制)为0062。
报文中容易出错的在于银联规范中的各种数据格式,定长、变长、ASCII变长、以及TLV格式等。在组包或者解包前,仔细看规范是十分重要的。
以下主要是针对各个域单独组包和多个域组包的情况举例。
报文域
域序号 域名称:中文
– 扩展的位元表
2 主账号
3 交易处理码
4 交易金额
5 清算金额
6 持卡人扣账金额
7 交易传输时间
9 清算汇率
10 持卡人扣账汇率
11 系统跟踪号
12 受卡方所在地时间
13 受卡方所在地日期
14 卡有效期
15 清算日期
16 兑换日期
18 商户类型
19 受理机构国家代码
22 服务点输入方式码
23 卡序列号
25 服务点条件码
26 服务点PIN获取码
28 交易费
32 受理机构标识码
33 发送机构标识码
35 第二磁道数据
36 第三磁道数据
37 检索参考号
38 授权标识应答码
39 应答码
41 受卡机终端标识码
42 受卡方标识码
43 受卡方名称地址
44 附加响应数据
45 第一磁道数据
48 附加数据——私有
49 交易货币代码
50 清算货币代码
51 持卡人账户货币代码
52 个人标识码数据
53 安全控制信息
54 实际余额
55 IC卡数据域
57 附加交易信息
58 IC(PBOC)卡交易数据
59 明细查询数据(暂不启用)
60 自定义域
61 持卡人身份认证信息
62 通联数据
63 金融网络数据
66 清算代码
70 网络管理信息码
74 贷记交易笔数
75 冲正贷记笔数
76 借记交易笔数
77 冲正借记笔数
78 转账笔数
79 冲正转账笔数
80 查询笔数
81 授权笔数
82 贷记服务费金额
84 借记服务费金额
86 贷记交易金额
87 冲正贷记金额
88 借记交易金额
89 冲正借记金额
90 原始数据元
95 替换金额
96 报文安全码
97 净清算额
99 清算机构代码
100 接收机构标识码
102 账户标识1
103 账户标识2
121 通联保留
122 受理方保留
123 发卡方保留
128 报文鉴别码
130 终端能力
131 终端验证结果
132 随机数
133 接口设备序列号
134 卡片数据
135 发卡方应用数据
136 应用密文
137 应用交易计数
138 应用交换配置码
139 授权响应密文及响应代码
142 发卡方脚本
143 发卡方脚本结果
144 加密时使用的交易类型
145 终端国家代码
146 终端交易日期
147 加密时使用的交易金额
148 加密时使用的货币代码
149 加密时使用的返还现金金额
161 终端类型
162 附加终端能力
164 卡片认证结果代码
192 报文鉴别码
未使用的报文域
域序号 域名称:中文
8 持卡人签单费金额
17 受理日期
20 扩展主账号国家代码
21 发送机构国家代码
24 网络国际标识符
27 授权标识响应长度
29 清算费
30 交易处理费金额
31 清算处理费
34 扩展主账号
40 服务限制代码
46 附加数据-JSO
47 附加数据-国家
55 保留给ISO使用
56 保留给ISO使用
64 报文鉴别代码字段
67 清算代码
68 接收机构国家代码
69 清算机构国家代码
71 报文编号
72 后报文编号
83 贷记交易费金额
85 借记交易费金额
91 文件更新码
92 文件保密代码
93 响应指示符
94 服务指示符
98 收款人
104 交易描述
105~120 保留使用
124~126 保留使用
129 保留使用
140~141 保留使用
150~160 保留使用
165~191 保留使用
域描述
单信息交易报文
0100/0110 授权类请求/应答报文
预授权请求/应答
追加预授权请求/应答报文
预授权撤销(联机、手工)请求/应答
基于PBOC电子钱包/存折标准的IC卡圈提请求/应答
建立委托关系请求/应答报文
撤销委托关系请求/应答报文
0200/0210 金融类请求/应答报文
余额查询请求/应答
取现请求/应答
存款请求/应答
存款撤销请求/应答
预授权完成(联机)请求/应答
预授权完成撤销请求/应答
消费请求/应答
消费撤销请求/应答
转账请求/应答
转入转账请求/应答
转出转账请求/应答
基于PBOC电子钱包/存折标准的IC卡圈存交易请求/应答
代收请求/应答
0220/0230 金融通知/应答类报文
存款确认通知/应答
转入确认通知/应答
预授权完成(离线)通知/应答
结算通知/应答
联机退货通知/应答
消费、消费撤销交易的代授权通知/应答
取现交易的代授权通知/应答
预授权完成、预授权完成撤销的代授权通知/应答
0120/0130 预授权、预授权撤销的代授权通知/应答
0420/0430 冲正类通知/应答报文
预授权冲正通知/应答
预授权撤销(联机、手工)冲正通知/应答
取现冲正通知/应答
消费冲正通知/应答
消费撤销冲正通知/应答
预授权完成冲正通知/应答
预授权完成撤销冲正通知/应答
转出转账冲正通知/应答
代收冲正通知/应答
代付冲正通知/应答
代付撤销冲正通知/应答
消费、取现、预授权冲正交易的代授权通知/应答
其它报文
0220/0230 收付费通知/应答报文
0520/0530 受理方对账类通知/应答报文
0522/0532 发卡方对账类通知/应答报文
0520/0530 入网机构转账类交易对账通知/应答报文
0620/0630 管理类通知/应答报文
文字信息传送通知/应答
资金结算通知/应答
涉嫌卡交易通知/应答
涉嫌卡通知/应答
0800/0810 网络管理类请求/应答报文
重置密钥请求/应答
0820/0830 网络管理类通知/应答报文
发送网络管理通知/应答
入网机构发送网络管理通知/应答
入网机构申请重置密钥通知/应答
0800/0810 代授权通知信息索取
代授权通知信息终止索取
多域组包
手动组装的8583报文:
0072600010000001000800203801000404000880000000000110101112240009303030313531000800350004343136310009303030303031303031
分析组包过程:
0072(长度)
6000100000(TPDU)
0100(版本号)
0800(信息类型)
2038010004040008(64位图-表示报文中存在哪些域–16进制变成二进制,按有1的顺序得知为存在域)【00100000 00111000 00000001 00000000 000000100 000000100 00000000 00001000:根据有64位二进制码中1的顺序得知:第一个1的index为:3,第二1的index个为:11……按照1的顺序依次得知域信息,后面的取值也是根据顺序来】
800000(3域)
000001(11域)
101011(12域)
1224(13域)
0009(24域)
303030313531(38域)
00080035000434313631(46域)
0009303030303031303031(61域)
按顺序拼接起来即可。
详细的分析,在单独域组包中可以看到。
单独域组包
2域单独组包:
格式:变长,LLVAR
类型:N..19,压缩时使用1字节BCD表示的长度 + 用右靠BCD码表示最大10个字节的变长域。
二进制:0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):4000000000000000
2域内容:6333021402021781,按规范转为:166333021402021781
计算报文长度:0034
组装8583报文:00346000100000010000804000000000000000166333021402021781
3域单独组包:
格式:定长
类型:N6,压缩时用BCD码表示的3个字节的定长域。
二进制:0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):2000000000000000
3域内容:800000 ,按规范转为:800000
报文长度:0028
组装8583报文:00286000100000010000802000000000000000800000
4域单独组包:
格式:定长
类型:N12,压缩时用BCD码表示的6个字节的定长域。
二进制:0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):1000000000000000
4域内容:1.01,按规范转为:000000000101
报文长度:002E
组装8583报文:002E6000100000010000801000000000000000000000000101
7域单独组包:
n10,10位定长数字字符
格式:MMDDhhmmss
二进制:0000 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0200000000000000
7域内容:0228102030,按规范转为:0228102030
报文长度:002C
组装8583报文:002C60001000000100008002000000000000000228102030
11域单独组包:
格式:定长
类型:N6,压缩时用BCD码表示的3个字节的定长域。
二进制:0000 0000 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0020000000000000
11域内容:000001,按规范转为:000001
报文长度:0028
组装8583报文:00286000100000010000800020000000000000000001
12域单独组包:
格式:定长,HHmmss
类型:N6,压缩时用BCD码表示的3个字节的定长域
二进制:0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0010000000000000
12域内容:203012,按规范转为:203012
报文长度:0028
组装8583报文:00286000100000010000800010000000000000203012
13域单独组包:
格式:定长,MMDD
类型:N4,压缩时用BCD码表示的2个字节的定长域。
描述:交易在终端上发生的时间。
二进制:0000 0000 0000 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0008000000000000
13域内容:0430,按规范转为:0430
报文长度:0024
组装8583报文:002460001000000100008000080000000000000430
14域单独组包:
格式:定长,MMYY
类型:N4,压缩时用BCD码表示的2个字节的定长域。
描述:卡的有效期,月月年年
二进制:0000 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0004000000000000
14域内容:0415,按规范转为:0415
报文长度:0024
组装8583报文:002460001000000100008000040000000000000415
15域单独组包:
格式:定长, MMDD
类型:N4,压缩时用BCD码表示的2个字节的定长域。
描述:清算日期(Date Of Settlement),月月日日
二进制:0000 0000 0000 0010 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0002000000000000
15域内容:1229,按规范转为:1229
报文长度:0024
组装8583报文:002460001000000100008000020000000000001229
32域单独组包:
格式:变长,LLNUM
类型:N..11,压缩时使用1字节BCD表示的长度 + 用右靠BCD码表示最大11个字节的变长域。
描述:受理机构标识码。该代理机构应是已被批准入网,能为商户提供收单服务的入网机构。
二进制:0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0000000100000000
32域内容:2001,按规范转为:042001
报文长度:0028
组装8583报文:00286000100000010000800000000100000000042001
34域单独组包:
格式:变长,LLVAR
类型:N..28,1个字节BCD长度值 + 最大28个字节的变长ASCII。
描述:扩展主账号信息域
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0000000040000000
34域内容:198809,按规范转为:06313938383039
报文长度:0030
组装8583报文:0030600010000001000080000000004000000006313938383039
35域单组组包:
格式:变长,LLVAR
类型:Z..48(加密后),1个字节BCD长度值 + 用右靠BCD码表示的最大24个字节的第二磁道数据。
描述:写在卡二磁道的数据。
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0000000020000000
35域内容:EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19,按规范转为:24EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19
报文长度:0054
组装8583报文:0054600010000001000080000000002000000024EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19
36域单独组包:
格式:变长,LLLVAR
类型:Z…112(加密后),2个字节BCD长度值 + 用右靠BCD码表示的最大56个字节的第三磁道数据。
描述:写在卡三磁道的数据。
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0000000010000000
36域内容:EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19,按规范转为:0024EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19
报文长度:0056
组装8583报文:005660001000000100008000000000100000000024EB5B9DB3618B836C1E334C8EBD8AAFA0C0777471F9F41B19
37域单独组包:
格式:定长
类型:AN12,12个字节的定长ASCII。
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0000000008000000
37域内容:11112233,按规范转为:303030303131313132323333
报文长度:003A
组装8583报文:003A6000100000010000800000000008000000303030303131313132323333
41域单独组包:
格式:定长
类型:N8,8个字节的定长ASCII
描述:定义在收单单位中定义一个服务终端的标识码
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0000000000800000
41域内容:12345678,按规范转为:3132333435363738
报文长度:0032
组装8583报文:003260001000000100008000000000008000003132333435363738
42域单独组包:
格式:定长
类型:ANS15,15个字节的定长ASCII
描述:在本地和网络中定义交易单位(商户)的编码
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000 0000 0000 0000
十六进制(BCD码>1001加6):0000000000400000
41域内容:821024512345678,按规范转为:383231303234353132333435363738
报文长度:0040
组装8583报文:00406000100000010000800000000000400000383231303234353132333435363738
46域单独组包:
格式:变长,LLLVAR
类型:ANS..255,2个字节BCD长度值 + 最大128个字节的ASCII。
描述:该域用于处理TLV数据
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0100 0000 0000 0000 0000
十六进制(BCD码>1001加6):0000000000040000
46域内容:0000#trans_type#99,按规范转为:0006000000023939
报文长度:0032
组装8583报文:003260001000000100008000000000000400000006000000023939
52域单独组包:
格式:定长
类型:B64,8个字节的定长二进制数
描述:用户在服务终端上交易用于识别用户合法性的一些数字
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0000 0000 0000
十六进制(BCD码>1001加6):0000000000001000
52域内容:5EF0F6C66C3ED34E,按规范转为:5EF0F6C66C3ED34E
报文长度:0032
组装8583报文:003260001000000100008000000000000010005EF0F6C66C3ED34E
55域单独组包:
格式:变长,LLLVAR
类型:ANS..255, 2个字节BCD长度值 + 最大128个字节的BCD数据
描述:本域为IC卡交易使用
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 0000
十六进制(BCD码>1001加6):0000000000000200
52域内容:9F260879CC8EC5A09FB9479F2701809F100807010199A0B806019F3704000000009F360201C2950500001800009A031205089C01609F02060000000000005F2A02015682027D009F1A0201569F03060000000000009F3303E0F0F09F34036003029F3501119F1E0832303033313233318405FFFFFFFFFF9F090220069F4104000000019F74064543433030319F631030313032303030308030303030303030,按规范转为:03189F260879CC8EC5A09FB9479F2701809F100807010199A0B806019F3704000000009F360201C2950500001800009A031205089C01609F02060000000000005F2A02015682027D009F1A0201569F03060000000000009F3303E0F0F09F34036003029F3501119F1E0832303033313233318405FFFFFFFFFF9F090220069F4104000000019F74064543433030319F631030313032303030308030303030303030
报文长度:0164
组装8583报文:0164600010000001000080000000000000020001599F260879CC8EC5A09FB9479F2701809F100807010199A0B806019F3704000000009F360201C2950500001800009A031205089C01609F02060000000000005F2A02015682027D009F1A0201569F03060000000000009F3303E0F0F09F34036003029F3501119F1E0832303033313233318405FFFFFFFFFF9F090220069F4104000000019F74064543433030319F631030313032303030308030303030303030
61域单独组包:
bitmap(64位图):
二进制:0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 1000
十六进制(BCD码>1001加6):0000000000000008
61域内容: 000001001,按规范转换为:0009303030303031303031
计算报文长度:0038
组装8583报文:003860001000000100008000000000000000080009303030303031303031