最近在研究银联的ISO8583协议,涉及到报文这方面的东西,感觉挺多的,分享一下,或许对你有帮助。
ISO8583协议解决的核心问题:
- 明确了报文每个字段的数据类型,是数字还是字符,都能定义清楚
- 支持64或者128个字段,但是如果某个字段没用到,就不用传输,对于交易来说完全够用,同时还节省了带宽和流量。
- 可以支持变长的字段
1,报文组成
2,报文相关知识
位:二进制中,一个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位变长数字或字符、特殊字符
3,报文实例
01 14 60 00 03 30 00 61 31 00 31 34 56 02 00 70 24 06 C0 20 C0 9A 11 16 62 26 89 01 14 56 47 83 00 00 00 00 00 00 00 00 22 00 02 52 20 05 05 10 00 01 00 12 37 62 26 89 01 14 56 47 83 D2 00 52 01 12 71 81 19 00 00 00 31 32 33 34 35 36 37 38 31 32 33 34 35 36 37 38 39 30 31 32 33 34 35 38 34 30 16 EC 2F C3 2C D4 38 A8 26 00 00 00 00 00 00 00 01 45 9F 1A 02 08 40 9F 27 01 80 9A 03 23 08 28 9F 36 02 17 98 9C 01 00 9F 03 06 00 00 00 00 00 00 9F 26 08 3A 19 36 77 73 20 52 F6 9F 37 04 68 63 B7 37 9F 09 02 00 20 9F 41 04 00 00 02 52 9F 34 03 42 03 00 9F 02 06 00 00 00 00 00 22 9F 35 01 22 9F 10 13 07 01 01 03 A0 28 02 01 0A 01 00 00 00 00 00 0F F7 A0 AC 9F 33 03 E0 F8 C8 5F 2A 02 08 40 82 02 7C 00 9F 1E 08 30 57 30 33 32 32 36 39 95 05 00 C0 04 E0 00 84 08 A0 00 00 03 33 01 01 02 00 14 22 00 00 21 00 05 00 36 31 39 37 33 37 43 44
4,报文解析结果
5,Java代码解析如下,包含55域的解析结果
码字不易,记得点赞关注哟