银联银行卡8583报文
一、报文结构
8583报文是16进制数据,包含4个部分,分别是报文头、报文类型标识符、位图、报文域,结构如下:
1、报文头
一共46对16进制数=46个字节,全为必填域。
2、报文类型标识符
由4个定长数字字符(ASCII字符)组成,4对16进制数=4字节。
例如:16进制转ASCII码,0200表示金融请求报文,0210表示金融响应报文。
3、位图
表示报文中有哪些域没有哪些域,一个报文可以有一个位图或两个位图。
16进制数转为2进制数,第一个位图的第一位如果是1,表示有第二个位图。
第一个位图:又称主位图,每个报文都有一个主位图,由8对16进制数(即8个byte字节=64个bit位=64个二进制位)组成。主位图第1位如果是1,表示有第二个位图,第二个位图第1位无效,从主位图和第二个位图第2位开始,每一位与一个域对应,1表示存在,0表示不存在。
4、报文域
通过位图,可以知道报文存在哪些域。
二、报文示例
1、响应报文,示例:
30323130F23E40818AC0801000000000100000C13136363232343234323330303030303036393031303030303030303030303130303030303037313730393435343034383037353230393435343030363237313930313037323236303130303030383134333733303230303831343337333032303030303030303438303735323030303130303038202030313030303820202020202020202031353630333030303030303530303036303030303030303030303430313130303030303030383932303130303030303433353143533232303030303034353033313030303030202020303030303030303030303030303030303030303030333030303632303442303539
解析步骤如下:
1)获取报文类型标识符
报文类型标识符是4位定长数字字符(ASCII字符)=4对16进制数,所以前4对16进制数:30 32 31 30,通过查询ASCII码表可知,其分别代表0210
2)解析位图
主位图数据:F2 3E 40 81 8A C0 80 10,其转化为二进制数:11110010 00111110 01000000 10000001 10001010 11000000 10000000 00010000,第一位是1,表示有第二个位图,00 00 00 00 10 00 00 C1,其转化为2进制数:00000000 00000000 00000000 00000000 00010000 00000000 00000000 11000001
3)解析相关域
按照位图信息查阅8583报文的128的域属性,整体报文解析如下:
30 32 31 30 (报文类型标志符)
F2 3E 40 81 8A C0 80 10 00 00 00 00 10 00 00 C1 (2个位图)
3136(变长长度为16) 36323234323432333030303030303639 域2
32 31 30 30 30 30 域3
30 30 30 30 30 30 31 30 30 30 30 30 域4
30 37 31 37 30 39 34 36 35 30 域7
34 38 30 37 35 35 域11
30 39 34 36 35 30 域12
30 36 32 37 域13
31 39 30 31 域14
30 37 32 32 域15
36 30 31 30 域18
30 30 域25
3038(变长长度为08) 31 34 33 37 33 30 32 30 域32
3038(变长长度为08) 31 34 33 37 33 30 32 30 域33
30 30 30 30 30 30 34 38 30 37 35 35 域37
30 30 域39
30 31 30 30 30 38 20 20 域41
30 31 30 30 30 38 20 20 20 20 20 20 20 20 20 域42
31 35 36 域49
30 33 30(变长长度为30) 30 30 30 30 30 35 30 30 30 36 30 30 30 30 30 30 30 30 30 30 34 30 31 31 30 30 30 30 30 30 域60
30 38(变长长度为08) 39 32 30 31 30 30 30 30 域100
30 34 33(变长长度为43) 35 31 43 53 32 32 30 30 30 30 30 34 35 30 33 31 30 30 30 30 30 20 20 20 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 域121
30 31 33(变长长度为13) 31 32 33 31 32 33 31 32 33 31 32 33 31 域122
根据16进制数查询ASCII码
// fld: 域 [000] 表示0域,[004]表示长度,[0210]表示解析出来的内容。需要注意的是报文没有0域,这里0域名
// 指的是报文的类型标志符
fld[000][004]=[0210]
fld[002][016]=[6224242300000069]
fld[003][006]=[010000]
fld[004][012]=[000000100000]
fld[007][010]=[0717094540]
fld[011][006]=[480752]
fld[012][006]=[094540]
fld[013][004]=[0627]
fld[014][004]=[1901]
fld[015][004]=[0722]
fld[018][004]=[6010]
fld[025][002]=[00]
fld[032][008]=[14373020]
fld[033][008]=[14373020]
fld[037][012]=[000000480752]
fld[039][002]=[00]
fld[041][008]=[010008 ]
fld[042][015]=[010008 ]
fld[049][003]=[156]
fld[060][030]=[000005000600000000004011000000]
fld[100][008]=[92010000]
fld[121][043]=[51CS22000004503100000 0000000000000000000]
fld[122][003]=[000]
2、请求报文,请求报文解析:
2E 02 30 33 30 34 30 30 30 31 30 30 30 30 20 20
20 34 38 30 31 30 30 30 30 20 20 20 30 30 30 30
30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32
30 30 F2 38 44 81 A8 E0 80 10 00 00 00 00 00 00
00 01 31 36 36 32 32 35 30 30 30 30 30 30 30 30
30 30 31 34 30 30 30 30 30 30 30 30 30 30 30 30
30 30 30 30 39 30 31 30 31 34 31 31 34 34 34 36
33 34 38 35 30 37 31 31 34 34 34 36 31 30 31 34
37 35 33 31 30 32 32 30 30 30 38 34 38 30 31 31
30 30 30 30 38 34 38 30 31 30 30 30 30 32 39 36
32 32 35 30 30 30 30 30 30 30 30 30 30 31 34 3D
33 30 31 30 32 30 31 30 30 30 30 30 31 30 31 34
30 30 30 30 34 39 34 31 30 30 30 30 30 31 39 31
38 30 31 31 31 30 30 37 35 33 31 30 30 30 31 B2
E2 CA D4 C9 CC BB A7 5A 30 30 30 31 20 20 20 20
20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20 20 20 20 20 20 20 31 35 36 30 32 37 30 30 30
30 30 32 30 30 30 33 30 30 30 30 30 30 30 30 30
30 30 30 31 31 30 30 30 43 46 41 46 46 31 43 36
1)报文头46字节=46对16进制数
2E 02 30 33 30 34 30 30 30 31 30 30 30 30 20 20
20 34 38 30 31 30 30 30 30 20 20 20 30 30 30 30
30 30 30 30 30 30 30 30 30 30 30 30 30 30
2)报文类型标识符,4字节=4对16进制数
30 32 30 30
3)位图
F2 38 44 81 A8 E0 80 10 00 00 00 00 00 00 00 01
4)根据位图结合域的详细说明来解析结果如下:
fld[000][004]=[0200]
fld[002][016]=[6225000000000014]
fld[003][006]=[000000]
fld[004][012]=[000000000090]
fld[007][010]=[1014114446]
fld[011][006]=[348507]
fld[012][006]=[114446]
fld[013][004]=[1014]
fld[018][004]=[7531]
fld[022][003]=[022]
fld[025][002]=[00]
fld[032][008]=[48011000]
fld[033][008]=[48010000]
fld[035][029]=[6225000000000014=301020100000]
fld[037][012]=[101400004941]
fld[041][008]=[00000191]
fld[042][015]=[801110075310001]
fld[043][040]=[测试商户Z0001 ]
fld[049][003]=[156]
fld[060][027]=[000002000300000000000011000]
fld[128][008]=[CFAFF1C6]
附:ASCII编码对照表
注:本文由博主搜集整理而来,不用于任何商业用途,如有侵权,请联系博主删帖!