ISO8583协议总结

来源:互联网 发布:java写文件换行 编辑:程序博客网 时间:2024/05/22 15:10

 

 

        最近有个关于ISO8583的项目,需要研究ISO8583协议,于是,自己查看了很多的文档,包括从网上下载了很多的资料。但是我发现一个缺点:网上的资料,很多是雷同的,或者说完全就是COPY别人的,而且很多资料在叙述的时候,很模糊,含糊不清,更有些资料在COPY的时候,出现了许多错误。鉴于以上原因,我在对ISO8583协议有相应的认识之后,想自己写一篇总结,作为以后的参考之用。现在将总结发表于此。

 

    下图是ISO8583的数据的基本描述。叙述如下:

 

 

1   TPDU : TPDU是iso8583数据流的一个头,它标志着,数据的开始。它有5个字节。

 

2  数据类型定义:数据类型定义指明该iso8583数据流是何种类型的数据流,即定义了数据包的类型。

类型有一下几种:

0100授权交易 
0110授权交易答复 
0200金融交易 
0210金融交易答复 
0240查询交易 
0250查询交易答复 
0400冲正交易 
0410冲正交易答复 
0800管理交易 
0810管理交易答复

 

3 主位图:主位图是iso8583中最重要的部分。它就像一个map一样,或者说像索引一样,能够查到数据位于哪些区域,第几个区域,以及如何划分数据包(数据流)。主位图有8 字节,共64位。这里有个数据位是需要做重要说明的:

bit  1 :    扩展位图标识位

   如果该位为1,则表示数据包中有扩展位图,如果该位为0,则表示没有扩展位图。

 

bit  64 : 报文鉴别代码MAC,用于鉴别报文的始发源和报文内容的有效性。

 

65  bit:保留-ISO

 

bit 128 : 位于扩展位图中,报文鉴别代码MAC,用于鉴别报文的始发源和报文内容的有效性。

 

   主位图和扩展位图一共有128位,每一个位都有自己独特的意义,如果该位为1,代表着:在位图之后的数据流中,有这位的数据,我们就要把他解包出来处理。

ISO8583协议规定了位图中每一位代表的意思是什么,以及该位索引的数据是什么类型的,有多大,多长。

我们来看一个位图例子:30 20 05 00 20 c0 02 01

简析如下:

将上面的数据转换为2进制的数据流:

 

3       0       2       0      0       5      0       0      2     0      c       0       0      2       0     1                                                 

0011 0000 0010 0000 0000 0101 0000 0000 0010 0000 1100 0000 0000 0010 0000 0001

即表示:3 4 11 22 24 35 41 42 52 55 64   位有数据,具体的数据如下

下表给出了详细的规定:

 

         上表的格式这属性需要详细的说明,下面列出位元的定义及格式、属性。表中格式和属性栏使用的缩略语解释如下:

 

 

         特别地:对于可变长度的类型如LLVAR 和LLLVAR,iso8583有规定:如果是LLVAR,则数据的前一个字节表示数据的长度。如果是LLLVAR,则数据的前两个字节表示数据的长度。例如:

第63位数据 LLLVAR   ans...999类型的数据

00 3133 3A 50 50 30 30 2E 30 31 4D 53 41 4E 44 45 53 3A 50 50 30 30 2E 30 31 4D 53 41 4E
    44 45 53

表示3为可变长度的数据。其中前两个字节表示后面的数据长度。00 31 即后面有31字节的数据流。