银联银行卡交换系统8583报文解析

news/2024/11/28 1:05:04/

前言

最近在做8583报文这块解析,也遇到一些坑。下面将会介绍自己学习和了解8583报文这块的经验,希望可以帮到那些刚刚接触8583报文的同学们。

入门

首先我们需要知道的是我们的8583报文是基于POS(销售终端的)还是基于银联银行卡交换系统的报文。网上有很多关于POS终端系统8583解析相关的文章,但是关于银联银行卡交换系统的报文很少。所以本文介绍的是基于银行银联卡交换系统8583报文解析的。阅读这篇博客之前,需要读者阅读这篇博客 8583报文基础知识 。

报文的结构

银联银行卡的报文结构包括4个部分,它们分别是报文头报文类型标志符位图报文域,其结构图如下所示:
在这里插入图片描述

  • 报文头
    报文头的组成如下所示:
    在这里插入图片描述
    报文头一共占46个字节,且这些域为必填域。

  • 报文类型标志符

报文类型标志符是有4个定长数字字符组成,这4个定长数字字符表示的是该报文的一个类型,例如0200表示金融请求报文,0210表示金融响应报文。

  • 位图

报文中使用位图来标识报文中有哪些域而没有哪些域,一个报文可以有一个位图或者两个位图。
第一个位图:通常又被称做主位图,每一个报文都有主位图。它是由64个二进制位(即8个字节)组成。位于报文类型标识符之后。8583报文都是16进制数据的报文,所以需要将8个字节的16进制数据转换成二进制数据。转换后除了第一位,每一位和一个域相对应,即和域2到域64相对应。如果一个位为0表示与之对应的域不出现在报文中,反之为1表示与之对应的域出现在报文中。需要注意的是主位图的第一位用来指明在主位图后是否还有第二个位图,第二个位图同样也是64个二进制位(即8个字节)组成。

这里举一个例子加深我们对位图的理解,假设有一个报文的位图数据为F2 3E 40 81 8A C0 80 10 00 00 00 00 10 00 00 C1。解析之前需要知道1 byte = 8 个比特位 ,1字节=2个16进制数。所以主位图的数据8个字节=8对16进制数即F2 3E 40 81 8A C0 80 10,分别转化8位二进制数据为:11110010 00111110 01000000 10000001 10001010 11000000 10000000 00010000 。通过上面我们知道主位图第一位标识是否有第二个位图。这里第一个位为1,故这个报文有2个位图。从主位图第一位后,每一位与一个域对应1表示该域存在,0表示不存在。所以上面二进制数据从2,3,4,7,11,12,13,14,15,18,25,32,33,37,39,41,42,49,60位置都是1,表明与之对应对域对象存在。第二个位图同理可得100,121,122,128位置域都存在。

  • 报文域

通过上面的位图,可以知道报文存在那些域。此时就可以很方便对报文进行解析。可以参考百度对于各个域的介绍百度8583报文域说明,也可以下载银联银行卡交换系统技术规范获取更多关于8583报文域名的信息。

响应报文的解析

解析报文之前,我们需要了解一下ACILL编码对照表因为后面解析会用得着,其编码表如下图所示:
在这里插入图片描述
下面是一个响应的8583报文,这里响应报文是没有报文头的。

30323130F23E40818AC0801000000000100000C13136363232343234323330303030303036393031303030303030303030303130303030303037313730393435343034383037353230393435343030363237313930313037323236303130303030383134333733303230303831343337333032303030303030303438303735323030303130303038202030313030303820202020202020202031353630333030303030303530303036303030303030303030303430313130303030303030383932303130303030303433353143533232303030303034353033313030303030202020303030303030303030303030303030303030303030333030303632303442303539

需要注意的是响应报文组成部分是没有报文头的,解析步骤如下:

  1. 获取报文类型标志符
    报文标志符号是4位的定长数字字符(这4位都是ASCII字符),4个定长数字字符(ASCII字符)= 4对16进制数,所以前四对16进制数据分别为:30 32 31 30,通过查询ASCII码表可知,其分别代表0210
  2. 解析位图
    主位图数据为F2 3E 40 81 8A C0 80 10,其转化8位二进制数据为:11110010 00111110 01000000 10000001 10001010 11000000 10000000 00010000 。这里第一个位为1,故这个报文有2个位图, 00 00 00 00 10 00 00 C1
    是第二个位图数据。从主位图第一位后,每一位与一个域对应1表示该域存在,0表示不存在。所以上面二进制从2,3,4,7,11,12,13,14,15,18,25,32,33,37,39,41,42,49,60位置都是1,表明与之对应对域对象存在。第二个位图同理可得100,121,122,128位置域都存在。
  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(变长长度为16363232343234323330303030303036392
32 31 30 30 30 303
30 30 30 30 30 30 31 30 30 30 30 304
30 37 31 37 30 39 34 36 35 307
34 38 30 37 35 3511
30 39 34 36 35 3012
30 36 32 3713
31 39 30 3114
30 37 32 3215
36 30 31 3018
30 3025
3038(变长长度为0831 34 33 37 33 30 32 3032
3038(变长长度为0831 34 33 37 33 30 32 3033
30 30 30 30 30 30 34 38 30 37 35 3537
30 3039
30 31 30 30 30 38 20 2041
30 31 30 30 30 38 20 20 20 20 20 20 20 20 2042
31 35 3649
30 33 30(变长长度为3030 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 3060
30 38(变长长度为0839 32 30 31 30 30 30 30100
30 34 33(变长长度为4335 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 30121
30 31 33(变长长度为1331 32 33 31 32 33 31 32 33 31 32 33 31122

解析除了128位mac校验码之外(需要获取项目的密钥和加密算法进行解析)其他域解析如下所示。

// 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]

请求报文解析

现有一个请求报文如下图所示(请求是有报文头,报文头长度46个字节):

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
  • 报文头 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 
  • 报文类型标志符 4字节=4对16进制数
30 32 30 30 
  • 位图
F2 38 44 81 A8 E0 80 10 00 00 00 00 00 00 00 01 

这里可以将上面16进制数据转化为2进制,就如同上面响应报文那样,还有一种简单的方式就是通过使用位图工具解析域,如下图所示:
在这里插入图片描述

  • 根据位图结合域的详细说明来解析结果如下:
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]

下载资源

银联银行卡交换系统技术规范说明文档
8583位图解析工具
Socket发送8583报文工具


http://www.ppmy.cn/news/561746.html

相关文章

智慧校园APP开发有哪些功能

随着科技的发展,传统的教育产业已经跟不上时代的步伐。为了解决教育行业的这一问题,智慧校园应用的开发应运而生。智慧校园APP开发通过科技的便利改善了校园服务。智慧校园APP开发打造互联网手机平台,通过智慧校园APP加强学生与学校的沟通&am…

物联网无线传输技术有哪些?

随着万物互联的时代到来,物体与物体之间的链接方式也在随着时代不断的发展。如果说传感器是物联网的触觉,那么无线传输技术就是物联网的神经系统,将遍布在物联网各处的传感器链接起来。在物联网出现之前,网络的接入需求主要集中在…

瑞士银行开户条件有哪些,瑞士银行开户的流程及注意事项是什么?

瑞士银行开户是指在瑞士境内或境外开户。根据开立账户对象的不同,可以分为个人瑞士银行开户和公司瑞士银行,瑞士拥有世界最完善的金融系统,其所在国的银行,也不会随意披露客户的个人资料,从而保证了客户海外资产的增值…

软件测试者去银行面试会问些什么?常见的测试金融面试题有哪些

前言 小伙伴们晚上好哈,现在已经是十月的最后一天了。金九银十也过去了,但是大家还是需要继续努力的哈,那么在这里呢笔者给大家准备了一份软件测试金融方面的面试题,笔者在这里就不多说废话了哟,咱们直接进入正题哈 1…

商业银行系统体系

一、业务系统 1、核心业务系统 业务功能包括:总账管理、卡系统管理、客户信息管理、额度控管、存款、贷款、资金业务、国际结算、支付结算、对外接口等。 2、清分清算系统 业务功能包括:以清算日期为准,将账务类交易、非账务类交易的手续…

网上银行转账是怎么测的,设计一下测试用例

最近呢有很多的小伙伴问我有没有什么软件测试的面试题,由于笔者之前一直在忙工作上的事情,没有时间整理面试题,刚好最近休息了一下,顺便整理了一些面试题,现在就把整理的面试题分享给大家,废话就不多说了直…

微信为什么要绑定银行卡?

微信一定要绑定银行卡吗?如果你不知道其中的原理,那么你就吃大亏了。 很多人对微信绑定银行卡呈现一种无所谓的态度,殊不知微信绑定银行卡的好处很多。 下面我从五个方面来回答这个问题问得有不完善之处还请大家多多指正。 1,绑…

人工智能目前有哪些突破?

作者:微软亚洲研究院 链接:https://www.zhihu.com/question/401469738/answer/1328852412 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 人工智能在助力人类未来、实现可持续发展上的突破是…