一种基于位置偏移的解析8583数据报文的方法及系统与流程

文档序号:14451030阅读:525来源:国知局

本发明涉及一种基于位置偏移的解析8583数据报文的方法,属于计算机科学基础的技术领域。



背景技术:

iso8583交易信息规范是基于多个系统网络间金融交易电子信息交换标准,依据“atm/pos/银联前置系统工程总体方案”对涉及atm/pos前置系统和atm等自助设备之间的金融类交易、代理业务类交易、汇总业务类交易、相关管理类交易、远程控制类交易等方面的接口进行了规范。在信息可以转换成进行系统网络间交换的接口的统一约束下,各系统的设计者可享有相应的灵活性。

由于iso8583具有这样的特点,它被各家银行广泛采用作为不同系统网络间交易标准。iso8583的广泛使用,为跨系统间的交易提供了一个标准而通用的定义,使网间交易成为可能。

但是,由于iso8583数据报文定义的灵活性和使用了位图的概念,使得程序设计者在iso8583数据报文的使用上带来了一些不便。比如说iso8583报文数据元的存在是由位图的每一位决定,使得每一个iso8583报文的长度和内容都有可能不同,而且每一个数据元在报文中偏移位置也是不一样的,给程序使用数据元数据带来了不便。iso8583报文中有一些数据元是以bit位定义,存在有非ascii字符,当把这些报文存放在数据库中进行查询时,会使屏幕混乱或无法显示,报文最后的mac校验数据元的生成比较困难。



技术实现要素:

本发明所要解决的技术问题是:解决现有iso8583报文数据元偏移位置不确定给读写带来的问题,提出一种基于位置偏移的解析8583数据报文的方法。

本发明为解决上述技术问题采用以下技术方案:

本发明提出一种基于位置偏移的解析8583数据报文的方法,包括以下步骤:

(1)读取报文头,解析报文的长度;

(2)读取位图数据,根据位图数据判断每个数据元的有无,为报文建立数据元索引,确定报文中每一个数据元的位置偏移;

(3)根据报文中每一个数据元的位置偏移,解析出报文中的每个数据元的数据内容。

进一步的,本发明所述的一种基于位置偏移的解析8583数据报文的方法,步骤(1)在解析报文长度时,建立位置边界,用于防止偏移时超出数据范围。

进一步的,本发明所述的一种基于位置偏移的解析8583数据报文的方法,步骤(1)中还包括:获取交易流水号,该交易流水号指交易发起方分配的该交易流水号,由报文发起方置入。

进一步的,本发明所述的一种基于位置偏移的解析8583数据报文的方法,步骤(2)具体为:

(201)读取位图数据,通过函数getbitmapchart(char*prealdata,charbitmap[16],intlenbitmap)获取位图数据,其中prealdata为报文数据,数据存放在bitmap[16]中,并根据主位图的第一位来判断是否有第二个位图以及设置位图长度lenbitmap;

(202)根据获得的位图数据bitmap[16]及位图长度lenbitmap,采用函数setbitflag(intbitflag[lenbitmap])设置与数据元对应的位图标志的值bitflag[lenbitmap],每位的值指示该域是否出现在报文中:如果一个位为0,与之相关的域不出现在报文中;如果一个位为1,与之相关的域出现在报文中;

(203)建立报文位置偏移,定义数组arrlength[lenbitmap]存放每位数据元的长度偏移。

进一步的,本发明所述的一种基于位置偏移的解析8583数据报文的方法,步骤(3)具体为:

(301)、取出数据元信息,采用函数accquiredata(char*prealdata,char*pstrdata,intlenbitmap)根据报文位置偏移,在iso8583报文中取出指定域号的数据元数据存放在pstrdata中;

(302)、将pstrdata中存放的十六进制数据转换成ascii字符。

进一步的,本发明所述的一种基于位置偏移的解析8583数据报文的方法,整个报文的长度不包括报文长度这两个字节,采用十六进制数表示。

进一步的,本发明所述的一种基于位置偏移的解析8583数据报文的方法,一个报文中有一个或两个位图,分别为主位图和副位图,两者均由64个二进制位构成。

本发明还提出一种8583数据报文解析系统,包括:

报文解析模块,用于读取报文头,解析报文的长度;

位置偏移索引模块,用于读取位图数据,根据位图数据判断每个数据元的有无,为报文建立数据元索引,确定报文中每一个数据元的位置偏移;

数据元解析模块,用于根据报文中每一个数据元的位置偏移,解析出报文中的每个数据元的数据内容。

进一步的,本发明上述提出的一种8583数据报文解析系统,位置偏移索引模块具体包括:

位图分析单元,用于读取位图数据,通过函数getbitmapchart(char*prealdata,charbitmap[16],intlenbitmap)获取位图数据,其中prealdata为报文数据,数据存放在bitmap[16]中,并根据主位图的第一位来判断是否有第二个位图以及设置位图长度lenbitmap;

数据元索引单元,用于根据获得的位图数据bitmap[16]及位图长度lenbitmap,采用函数setbitflag(intbitflag[lenbitmap])设置与数据元对应的位图标志的值bitflag[lenbitmap],每位的值指示该域是否出现在报文中:如果一个位为0,与之相关的域不出现在报文中;如果一个位为1,与之相关的域出现在报文中;

报文位置偏移单元,用于通过定义数组arrlength[lenbitmap]存放每位数据元的长度偏移,建立报文位置偏移。

进一步的,本发明上述提出的一种8583数据报文解析系统,数据元解析模块具体包括:

数据元取出单元,采用函数accquiredata(char*prealdata,char*pstrdata,intlenbitmap)根据报文位置偏移,在iso8583报文中取出指定域号的数据元数据存放在pstrdata中;

转换单元,用于将pstrdata中存放的十六进制数据转换成ascii字符。

本发明采用上述技术手段,与现有技术相比,具备优点如下:

本发明提出一种解析iso8583数据报文的方法,通过建立数据元位置偏移和转换ascii字符的方式,提高iso8583数据报文的解析效率和展示效果。同时,本发明方法不破坏原有报文数据结构完整的情况下,便可将数据快速准确的解析出来,具有更低的资源消耗,解析效率得到提高。

附图说明

图1为本发明实施例中的iso8583报文结构。

图2为本发明实施例中的iso8583报文头结构。

图3为本发明实施例中的iso8583位图结构。

具体实施方式

下面结合附图对本发明的技术方案做进一步的详细说明:

本技术领域技术人员可以理解的是,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。

本发明为了解决iso8583报文在数据库中的存取及查询,将bit形式的iso8583报文的每一个字节转换为ascii字符。为了方便对位图的操作,提供函数getbitmapchart()为每个数据元取出位图。为了解决iso8583报文数据元偏移位置不确定给读写带来的困难,首先为iso8583报文建立数据元索引,确定报文中每一个数据元的偏移位置。通过函数accquiredata()根据报文偏移位置索引可取出任一数据元的信息。

如图1,报文由四部分组成:报文头,报文类型标识符,位图(bitmap:以表示各数据元的有无),以及数据元。本发明设计了一种基于位置偏移的解析8583数据报文的方法,该方法解析过程中,解析过程包括获取位图结构,建立位置偏移索引,获取数据元数据。

具体的,本发明方法包括以下步骤:

步骤1、读取报文头,解析报文长度。如图2所示,整个报文的长度不包括报文长度这两个字节,采用十六进制数表示。获取交易流水号,该交易流水号指交易发起方分配的该交易流水号,由报文发起方置入。

步骤2、读取位图数据,如图3所示,一个报文中可以有一个或两个位图,分别为主位图和副位图(两者均由64个二进制位构成)。通过函数getbitmapchart(char*prealdata,charbitmap[16],intlenbitmap)获取位图数据,其中prealdata为报文数据,数据存放在bitmap[16]中,并根据主位图的第一位来判断是否有第二个位图以及设置位图长度lenbitmap。char()是一个函数(function),可将其他类型计算机文件中的代码转换为字符。int在c语系编程语言(c、c++、c#、java等)中,是用于定义整数类型变量的标示符。

步骤3、根据获得的位图数据bitmap[16]及位图长度lenbitmap,采用函数setbitflag(intbitflag[lenbitmap])设置与数据元对应的位图标志的值bitflag[lenbitmap]。每位的值指示该域是否出现在报文中:如果一个位为0,与之相关的域不出现在报文中;如果一个位为1,与之相关的域出现在报文中。

步骤4、建立报文位置偏移,定义数组arrlength[lenbitmap]存放每位数据元的长度偏移。

步骤5、取出数据元信息,采用函数accquiredata(char*prealdata,char*pstrdata,intlenbitmap)在iso8583报文中取出指定域号的数据元数据存放在pstrdata中。

步骤6、将pstrdata中存放的十六进制数据转换成ascii字符。

本发明还提出一种8583数据报文解析系统,包括:

报文解析模块,用于读取报文头,解析报文的长度;

位置偏移索引模块,用于读取位图数据,根据位图数据判断每个数据元的有无,为报文建立数据元索引,确定报文中每一个数据元的位置偏移;

数据元解析模块,用于根据报文中每一个数据元的位置偏移,解析出报文中的每个数据元的数据内容。

综上,本发明方法利用位置偏移方式处理iso8583报文,适合在金融交易环境中对数据报文做解析。具有更低的资源消耗,解析效率提高等优点。

以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1