您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页通讯报文学习手册

通讯报文学习手册

来源:叨叨游戏网
通讯报文学习手册

通讯报文学习手册

1

通讯报文学习手册

1 常用报文类型

目前常用报文类型包括:ISO8583报文、定长报文、不定长报文、XML报文、分隔符报文

2 ISO8583报文

ISO8583包(简称8583包)是一个国际标准的包格式,最多由128个字段域组成,每个域都有统一的规定,并有定长与变长之分。8583包前面一段为位图,用来确定包的字段域组成情况。

其中位图是8583包的灵魂,它是打包解包确定字段域的关键, 而了解每个字段域的属性则是填写数据的基础。

在网络中传输报文的格式是不断变化的,报文中使用位图来标识报文中有哪些域而没有哪些域。一个报文中可以有一个或两个位图位图在报文中位置如图所示:

报文类型标识符

位 图 报文域 位图1=域2- 位图2=域66-128

图1 位图

2.1 第一个位图

第一个位图又称为主位图,每一个报文都有主位图。它由个二进制位(8个字节)构成,位于报文类型标识符之后。除了第一位,每一位和一个域相对应,即和域2到域相对应。每位的值指示该域是否出现在报文中:

如果一个位为0,与之对应的域不出现在报文中; 如果一个位为1,与之对应的域出现在报文中。

域号是1的域不存在。主位图的第一位用来指明在主位图后是否还有第二个位图,称为位图二。位图二的说明见下节。

下图说明了位图的位置和功能。在这个例子中,位图第一位是0,表示主位图后没有第二个位图。第2、3、4位是1,表示域2、3、4出现在报文中。第5、6位是0,表示报文中没有域5、6。第7位是1,表示域7出现在报文中,依次类推。

2

通讯报文学习手册

Bits 1-8 01110010 9-16 00000100 17-24 01000100 25-32 33-40 10000001 00101000 41-48 11000000 49-56 57- 10000000 00010000 消息类型 位图 2 3 4 7 14 18 22 数据域 25 32 35 37 41 42 49 60 2-主账号 3-交易处理码 4-交易金额 7-交易传输时间 14-卡有效期 18-商户类型 22-服务点输入方式码 25-服务点条件码 32-代理机构标识码 35-第二磁道数据 37-检索参考号 41-受卡机终端标识码 42-受卡方标识码 49-交易货币代码 60-自定义域

图2 第一个位图示例

2.2 第二个位图

主位图的第一位指明了主位图后是否有位图二。和主位图相同,位图二也由个二进制位(八字节)构成。可以认为位图二是主位图的扩展,和域66到128相对应。报文域65不存在。

只有当报文中包含有域66到域128中的域,位图二才会使用到。位图二紧接着主位图,并在报文域之前。下图显示了位图二的位置和功能。主位图的第一位是1表示位图二的存在。如果位图中的哪一位为1,表示以该位序号为序号的域存在。例如,位图二中的位90是1,表示报文中有域90存在。

1位图1bits 1-0位图2域2-域66-128第1位表示位图二存在位图二所指的域

图3 第二个位图示例

2.3 程序处理的准则

本节详细说明CUPS处理报文数据时的规则。

3

通讯报文学习手册

2.3.1 报文的长度

正确的报文最大长度不超过1846字节。 错误的报文最大长度不超过12字节。

2.3.2 数据的表示

对于ISO8583报文中的域规定为数字的,CUPS以数字的ASCII码表示。本文中以这种方式表示:

nx,x位定长数字字符

对于ISO 8583报文中的域规定为字符和数字的,CUPS以字符和数字ASCII码表示,本文中以这种方式表示:

anx,x位定长的字母和数字字符

对于一些域,虽然定义为字符和数字,实际内容的取值也可能只是数字,例如域37—检索参考号。

标记为ans的域表示该域除了字母和数字,还允许有特殊字符,比如破折号、斜杠等。

2.3.3 域的对齐

所有域以字节边界对齐。

2.3.4 域的长度

ISO标准中规定的可变长度域最长可以达到999个字节。本文中的域描述给出了每个可变长度域的最大长度字节数,这个长度适应于整个域,该域中所有子域的长度和应小于等于整个域的长度。

所有的长度值不包括长度子域本身的长度。报文域的长度占位含义依赖于域的属性,可以是字母、数字或二进制位。

此规定可以让其它网络和系统的应用能正确的跳过这些域。

所有的二进制位域,如位图和PIN,它们的位串必须被正确的构造。

2.3.5 变长域处理

对于变长域通常定义为如下格式:ansb...512(LLLVAR)

其中”ansb”:表示数据类型为字母、数字、特殊字符、二进制数 “...512”:表示最大长度为512个字节

“LLLVAR”:L表示长度位,LLL表示3个字节的长度

ansb...512(LLLVAR):3个字节的长度值+最大512个字节(字母、数字、特殊字符、二进制数)的数据

2.3.6 对未使用位置的填充

对于固定长度的报文域有以下填充规则:

——如果是数字域,右靠齐,左边多余位填零; ——如果不是数字域,左靠齐,右边多余位填空格。

2.3.7 带有可选择子域的报文域 如果一个域带有子域,并且不是全部子域都要求出现在报文中,那么只要该域的任何一个子域出现在报文中,该域在位图中对应的位就要设为1。

2.4 BCD码

二进制编码的十进制数,简称BCD码(Binarycoded Decimal). 这种方法是用4位二进制码的组合代表十进制数的0,1,2,3,4,5,6 ,7,8,9 十个数符。4位二进制数码有16种组合,原则上可任选其中的10种作为代码,分别代表十进制中的0,1,2,3,4,5,6,7,8,9 这十个数符。最常用的BCD码称为8421BCD码,8.4.2.1 分别是4位二进数的位取值。 点击此处将给出十进制数和8421BCD编码的对应关系表。 1、BCD码与十进制数的转换 BCD码与十进制数的转换.关系直观,相互转换也很简单,将十进制数75.4转换为

4

通讯报文学习手册

BCD码如: 75.4=(0111 (0101.0100)BCD 若将BCD码1000 0101.0101转换为十进制数如: (1000 0101.0101)BCD=85.5 注意:同一个8位二进制代码表示的数,当认为它表示的是二进制数和认为它表示的是二进制编码的十进制数时,数值是不相同的。 例如:00011000,当把它视为二进制数时,其值为24;但作为2位BCD码时, 其值为18。 又例如00011100,如将其视为二进制数,其值为28,但不能当成BCD码,因为在8421BCD码中,它是个非法编码

3 定长报文

定长报文,应该是目前使用最广泛的报文,是报文类型中的元老级别人物了,定长报文也比较简单,理解起来也比较方便。但是定长报文也有其局限性,它的最大弱点就是担心以后所定义域的长度要加长,这个时候配置或程序就要改变。

4 不定长报文

由长度+数据组成,长度用一个字节的二进制数表示,数据全部转换成字符串传送,字符串的最大长度由系统的BYTE_MAX_LEN宏定义指定,大于该长度的部分系统保留作为控制命令用。如果数据单元的长度超过BYTE_MAX_LEN,则分段发送,0xFF作为超长数据的标志。例如要传768字节数据,由于系统定义BYTE_MAX_LEN为250,则该数据段为0xFF+250字符+0xFF+250字符+0xFF+250字符+0x12+18字符;如要传250字节数据时,则该数据段为0xFA+250字符。

5 XML报文

XML是eXtensible Markup Language的缩写。扩展标记语言XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。

6 分隔符报文

报文各域之间使用特殊符号区分,一般使用”|”作为分隔符,也可以使用其它符号作为报文之间的分隔符。

5

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务