ISO8583报文怎么来的

2018-10-15  本文已影响0人  Jack_6a46

金融系统起初是由IBM这些大的公司来提供设备,比如主机与终端等。计算机设备之间进行通讯,需要交换数据。对于即溶交易来说,也需要在各个主机与设备之间交换数据。那这些数据不能是一对无用的乱码,而要能够代表特定的含义。

由此我们需要设计一个通用的报文协议,来解决金融系统之间的报文交换。技术不断更新,以金融交易为业务的公司如雨后春笋般出现。似乎指定一个行业规范让各个公司之间能够协调成了一件势在必行的议程。

其实金融行业涉及的数据内容并非无法统计,恰恰相反,是比较少的。我们在心底数的过来,像交易类型、账号、账户类型、密码、交易金额、交易手续费、日期时间、商户代码、二三磁道数据、交易序列号等。至此,我们可以设计简单的ISO8583报文,定义128个字段,将所有能够考虑到的因素,按照顺序排起来,分别对应128个字段中的一个字段。每个数据类型占固定的长度,这个顺序和长度我们都事先定义好。要发送一个报文时,就将128个字段按照顺序接起来,然后将接起来的整串数据包发送出去。

任何接收方收到ISO8539报文后,直接按照定义的规范进行解包即可。那么问题来了?

  1. 每次传送的报文都把128个字段传过去,传送速度是不是变慢了呢?
  2. 有时候我们只需要其中的5个字段,多传的123个字段是不是在做无用功呢?
  3. 如果某些字段的长度不固定怎么办呢?

我们在思考,可不可以在报文前面加上个包头,包头里面包含的信息能够让别人知道只传了5个字段。怎么设计这个包头,我们用16个字节,即128个Bit来表示128个字段中的某个字段是否存在。接收方在接收到报文后,可以先根据最前面的报文头,就知道紧接着报文头后面的报文有哪些字段。然后对应各个字段进行解包。

我们把这16个字节称为Bit Map,即位图,用来表示某个位是否存在。因为报文头第二个64Bit视情况而定可有可无,所以我们叫它Extended bit map–扩展位图。报文头最开始的64Bit我们叫它Primary bit map–主位图。

我们直接把扩展位图固定放到128个字段的第一个字段,而主位图每个数据包都有,就强制性放在所有128个字段的前面,并不归入128个字段中去。

解决一些字段长度不固定的方法,我们可以在字段的开始部位加上长度,代表接下来多少字节属于这个字段。在规范里如果我们定义某个字段的属性是”LLVAR”,这里的LL表示长度,VAR表示后面的数据。两个LL表示两位长,最大是99;如果三位就是LLLVAR,最大是999。

这样,最后我么就得到了ISO8583规范的那张字段描述表了。想要详细地知道每个字段地含义直接对着表看就可以。

上一篇 下一篇

猜你喜欢

热点阅读