8583协议

合集下载

8583 顺序栈的基本操作

8583 顺序栈的基本操作

8583 顺序栈的基本操作8583协议是指国际标准化组织制定的一种银行卡交易的通信规范。

而顺序栈是一种常见的数据结构,可以用来存储和操作这些交易数据。

下面我们来详细介绍一下8583顺序栈的基本操作。

一、定义顺序栈在进行8583顺序栈的基本操作之前,我们首先需要定义顺序栈。

顺序栈是一种线性结构,它的特点是只能在一端进行插入和删除操作。

顺序栈通常使用数组来实现,它包含以下几个基本元素:1.数组data:用于存储栈中的元素;2.变量top:表示栈顶元素的位置;3.变量size:表示栈的空间大小。

二、初始化顺序栈初始化顺序栈是指将顺序栈中的元素清空,让顶部指针指向栈顶。

顺序栈的初始化操作如下:(1)给定一个数组空间进行初始化,数组空间大小等于顺序栈的最大容量;(2)将栈顶指针top赋值为0,表示当前栈为空。

三、进栈操作进栈是指将一个元素压入栈中,使它成为新的栈顶元素。

进栈操作通常包括以下几个步骤:(1)判断栈是否已满,若已满则输出“栈已满”并结束操作;(2)将元素压入栈中,即将元素存入数组data[top]中;(3)将栈顶指针top加1,表示当前栈顶元素位置已经改变。

四、出栈操作出栈是指将栈顶元素弹出栈,并将栈顶指针指向新的栈顶元素。

出栈操作通常包括以下几个步骤:(1)判断栈是否为空,若为空则输出“栈已空”并结束操作;(2)将栈顶元素弹出,即将数组data[top-1]中的元素取出;(3)将栈顶指针top减1,表示当前栈顶元素位置已经改变。

五、获取栈顶元素获取栈顶元素是指查看当前栈顶元素的值,不改变栈的结构。

获取栈顶元素的操作如下:(1)判断栈是否为空,若为空则输出“栈已空”并结束操作;(2)返回栈顶元素的值,即返回数组data[top-1]中的元素。

六、判断栈是否为空判断栈是否为空是指查看当前栈中是否有元素。

判断栈是否为空的操作如下:(1)如果栈顶指针top等于0,表示当前栈为空,返回true;(2)否则,表示当前栈不为空,返回false。

Iso-8583协议与磁条卡

Iso-8583协议与磁条卡
2012-4-21
ISO-8583
将打包压缩的数据发送 给下一层
ISO-8583的下一层
Copyright 2005 Prochip Electronics Co,ltd. All Rights Reserved. , 2 Not to be reproduced by any means without prior written consent.
2012-4-21
磁条卡的时序图
Copyright 2005 Prochip Electronics Co,ltd. All Rights Reserved. , 14 Not to be reproduced by any means without prior written consent.
Copyright 2005 Prochip Electronics Co,ltd. All Rights Reserved. , 7 Not to be reproduced by any means without prior written consent.
2012-4-21
表1 第1磁道信息格式
Copyright 2005 Prochip Electronics Co,ltd. All Rights Reserved. , 4 Not to be reproduced by any means without prior written consent.
2012-4-21
报文得内容(重点是如下几个问题):
nottobereproducedbyanymeanswithoutpriorwrittenconsent201851表1第1磁道信息格式字段d动态s静态字段长度备注序号名称1起始标志s1见712格式代码s299见723主账号s1319见734字段分隔符s1见745姓名s226见756字段分隔符s1见747失效日期s4yymm见768服务代码s3见779附加数据s可变见7810结束标志s1

银联8583理解

银联8583理解

交易时卡片与终端产生的数据按照一定规律组成一个数据包,这个规律即是8583规范。

该数据包被终端用来与银行系统通信,银行与银行之间的通信。

目前国内金融用的是银联8583规范,与ISO8583稍微有些出入。

它规定了报文结构,格式,内容以及数据元的位置和数据元的值。

一些概念:1.报文:用于机构之间交换信息的数据元集合;2.报文结构:按如下顺序排列报文类型标识符| 一个或两个位元表| 数据元序列3.报文类型标识符:四位数字型数据字段,1位2位表示报文类别,当它们都在1到8之间时,3/4位表示报文传输方式和功能4.位元表:分为基本位元表和扩展位元表基本位元表的01位取值1则表示扩展位元表存在,为0则表示基本位元表;位元表结构如下:基本位元表:01 位元位置64数据元扩展位元表:01 64 128数据元举例:位元位置也叫位图20 00 38 00 00 00 00 34把它解开,排列一下20 = 1010 000000 = 0000 000038 = 0011 1000依次类推,得到一串数字0010 0000 0000 0000 0011 1000 0000 0000 0000 0000 0000 0000 0000 0000 0011 0100然后从左到右数一下里头含有1的是那几位,上面的例子我们得到3 19 20 21 59 60 62 ,这几位含有1。

也就是说接下来的报文包含有这几个域。

数据元的数据存放则是按顺序依次存放,查询时按照位图的位置将数据元的数据依次对应相应的域。

数据元格式为:长度+数据(该长度不包含长度字节,仅仅是数据的长度)V AR:表示可变字段的长度LL:表示长度小于100LLL:表示长度小于1000做一个简单的例子比如消费交易,需要上送交易类型,卡号等等,定义如下卡号第2域LLV AR BCD 5309987876545342交易类型第3域长度6 BCD 900000金额第4域长度12 BCD 100分时间第7域长度8 BCD 200308022磁道信息第35域LLV AR ASCII 1234563磁道信息第36域LLLV AR BCD 123456001商户号第41域LLVAR ASCII 98765432现在开始打包,首先按照长度和类型把上面的数据处理一下卡号165309987876545342交易类型900000金额000000000100时间200308022磁道063132333435363磁道0009123456001商户号083938373635343332接下来按照域信息生成位图因为有第2域,所以第二个位置是1,由第三域,所以第三个位置是1,。

8583协议

8583协议

ISO8583报文协议最开始时,金融系统只有IBM这些大的公司来提供设备,象各种主机与终端等。

在各个计算机设备之间,需要交换数据。

我们知道数据是通过网络来传送的,而在网络上传送的数据都是基于0或1这样的二进制数据,如果没有对数据进行编码,则这些数据没有人能够理解,属于没有用的数据。

起初的X.25、SDLC 以及现在流行的TCP/IP网络协议都提供底层的通讯编码协议,它们解决了最底层的通讯问题,能够将一串字符从一个地方传送到另一个地方。

但是,仅仅传送字符串是没有太大意义的,怎样来解析字符串代表什么内容是非常重要的,否则传送一些“0123abcd”的字符串也是无用的乱码。

让我们随着时光回到几十年前的某个时刻,假设我们被推到历史的舞台上,由我们来设计一个通用报文协议,来解决金融系统之间的报文交换,暂且称该协议叫做ISO8583协议。

此时,技术是在不断的前行,当初IBM一支独秀的局面好像已经不妙了,各种大小不一的公司都进入金融行业以求能有所斩获,呈一片百花齐放的局面。

我们怎样来设计一个报文协议,能够将这些如雨后春笋般出现的所有公司都纳入进来,其实也不是一件很简单的事。

我们还是先一步步的来考虑吧。

金融行业其实涉及到的数据内容并不是成千上万,无法统计,恰恰相反,是比较少的。

我们都可以在心底数得过来,象交易类型、帐号、帐户类型、密码、交易金额、交易手续费、日期时间、商户代码、2磁3磁数据、交易序列号等,把所有能够总结出来的都总结起来不过100个左右的数据。

那我们可以首先简单的设计ISO8583,定义128个字段,将所有能够考虑到的类似上面提到的“帐号”等金融数据类型,按照一个顺序排起来,分别对应128个字段中的一个字段。

每个数据类型占固定的长度,这个顺序和长度我们都事先定义好。

这样就简单了,要发送一个报文时,就将128个字段按照顺序接起来,然后将接起来的整串数据包发送出去。

任何金融软件收到ISO8583包后,直接按照我们定义的规范解包即可,因为整个报文的128个字段从哪一位到哪一位代表什么,大家都知道,只要知道你的数据包是ISO8583包即可,我们都已经定义好了。

j8583用法

j8583用法

J8583是一种用于金融交易的接口标准,它是由J8583组织制定的。

J8583接口标准定义了一组通信协议和消息格式,用于在金融交易中实现安全、可靠的数据传输和数据交换。

J8583的使用需要遵循一定的步骤和规范。

首先,需要使用J8583提供的接口库或API进行编程。

这些库或API通常提供了一组函数和工具,用于实现J8583协议的各个层次。

其次,需要按照J8583规定的消息格式和协议进行消息的编码和解码。

这通常涉及到对二进制数据的处理和解析,以及按照规定的协议规范进行数据包的组装和拆分。

在使用J8583时,需要注意一些关键的细节和规范。

例如,需要确保消息的完整性和可靠性,避免数据包丢失或损坏;需要确保消息的加密和解密安全可靠,防止数据泄露或被篡改;需要按照规定的协议规范进行数据包的组装和拆分,确保消息的正确性和一致性。

总之,J8583是一种用于金融交易的重要接口标准,它的使用需要遵循一定的规范和步骤,需要注意一些关键的细节和规范,以确保安全、可靠的数据传输和数据交换。

8583协议

8583协议

8583协议
8583协议采用了一种类似于TLV(Type Length Value)的数据结构,数据包含了消息类型、位图、各种域以及域值。

其中,消息类型用于标识交易的类型,位图用于标识数据域的存在与否,各种域则包含了交易的具体信息,比如交易金额、交易时间、交易参与方等。

通过这种结构,8583协议可以灵活地适应各种不同类型的金融交易,同时也能够满足不同金融机构和系统的需求。

在实际应用中,8583协议的具体实现可能会有所不同,但其基本原则和数据结构是一致的。

金融机构和系统需要严格按照8583协议的规定来进行数据交换和处理,以确保交易的准确性和安全性。

同时,由于8583协议的灵活性,金融机构和系统也可以根据自身的需求对协议进行定制和扩展,以满足特定的业务需求。

除了在金融领域,8583协议也被广泛应用于其他领域的数据交换中,比如电信行业、交通行业等。

这是因为8583协议具有通用性和灵活性,可以适应不同领域的数据交换需求。

同时,由于8583协议的成熟和稳定,各种相关的技术和工具也得到了广泛的支持和应用,使得8583协议成为了一种通用的数据交换标准。

总之,8583协议作为一种通用的金融交易通信协议,具有重要的意义和价值。

它不仅规范了金融交易数据的格式和规则,保障了金融交易的安全性和准确性,而且也为各种金融机构和系统提供了一种灵活和通用的数据交换标准。

随着金融科技的发展和金融业务的不断创新,8583协议也将继续发挥重要作用,为金融交易的高效、安全和便捷提供坚实的技术支持。

8583协议理解

8583协议理解ISO8583报⽂(简称8583包)⼜称8583报⽂是⼀个国际标准的包格式,最多由128个字段域组成,每个域都有统⼀的规定,并有定长与变长之分。

8583包前⾯⼀段为位图,⽤来确定包的字段域组成情况。

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

在POS机的开发上时经常要⽤到,例如回头客会员管理系统在POS机上的应⽤就是采⽤8583报⽂。

报⽂的类型有很多种,⽐如:sale,reversal,settlement等等,不同的类型组包也是不⼀样的, 下⾯是“消费”类型报⽂的测试和组8583报⽂的过程,针对我们⽇常使⽤POS机系统来说的,这⾥主要是模拟的POS终端发向POSP系统的8583报⽂。

其基本业务流程图如下所⽰基础知识:1byte = 8bit1byte = 2个16进制数2个字节=1个字符BCD码:⽤4位⼆进制数来表⽰1位⼗进制数中的0~9这10个数码,即1bcd码=4bit报⽂结构:TPDU头 = ID(60H) + ⽬的地址(N4) + 源地址(N4),长度为10字节,压缩时⽤BCD码表⽰为5个字节长度的数值。

报⽂头 = 应⽤类别定义(N2 )+软件总版本号(N2) + 终端状态(N1) + 处理要求(N1)+ 软件分版本号(N6),总长度为12字节,压缩时⽤BCD码表⽰为6个字节长度的数值。

报⽂长度(2字节)+TPDU(5字节)+报⽂头(6字节)+域数据(指令码(0域 2字节消息类型)+位图(8字节)+其他域数据POS终端上送POS中⼼的消息报⽂结构包括TPDU、报⽂头和应⽤数据三部分:16进制报⽂:007b 6000160000 602200000000 0200 7020048020c08811600016000060220000000002007020048020c08811165477666265921222000000000000014959555556022000375477666265921222d25085060000012600000青⾊背景:报⽂长度 007b 如上是246个字节->123个字符->长度是123(10进制)->7b(16进制)->占⽤两个字节007b黄⾊背景:TUDU头 6000160000红⾊背景:报⽂头 602200000000磁条卡⾦融⽀付类应⽤为:60软件版本号 22终端状态 0(正常交易状态)处理要求 0(⽆处理要求)保留使⽤ 000000灰⾊背景:消息类型 0200绿⾊背景:bitmap位图,转成bit显⽰, 7020048020c08811根据⽂档我们可以轻易的得到需要的域为2,3,4,11,22,25,35,41,42,49,53,60,64域(6) 2域165477666265921222(16个字节,最⼤是19个字节) 主账号N..19(LLVAR),2个字节的长度值+最⼤19个字节的主账号,压缩时⽤BCD码表⽰的1个字节的长度值+⽤左靠BCD码表⽰的最⼤10个字节的主账号。

ISO8583各域详解--整理版

ISO8583各域详解--整理版ISO8583各域详解8583协议的报文域编码格式分为:BINARY、CHAR、NUMERIC、LLVAR、LLLVAR、LLLVAR_NUMERIC这几种格式。

BINARY采用二进制编码(8位二进制数编码为一个字节)。

CHAR、LLVAR、LLLVAR为ASC(即正常的getBytes(Encoding))编码。

NUMERIC、LLLVAR_NUMERIC 采用BCD(半个字节表示一个10进制数,每两位编码为一个字节)编码。

CHAR、BINARY、NUMERIC都需要指定长度。

CHAR类型左对齐、右补空格。

NUMERIC右对齐、左补零。

LLVAR域前加一个字节的字节长度(采用bcd编码)。

LLLVAR域前加两个字节的字节长度(采用bcd编码)。

LLLVAR_NUMERIC域前加两个字节的长度(注:非字节长度,而是数字的长度,即字节长度的两倍)(采用bcd编码)。

代码中会在IsoField setValue时进行格式化,组装报文时计算LLVAR等域长。

ISO8583域说明ATM、前置机间通讯采用ISO8583 包格式。

以下是位元、报文等的定义。

1、信息类型(message type)定义位图位置:-格式:定长类型:N4描述:数据包的第一部分,定义数据包的类型。

数据类型由数据包的发起者设定,应遵循以下要求:数据包开始部分必须是信息类型;对不支持的信息类型能给出拒绝应答。

0100授权交易0110授权交易答复0200金融交易0210金融交易答复0240查询交易0250查询交易答复0400冲正交易0410冲正交易答复0800管理交易0810管理交易答复2、位图(Bit Map) - 基本位图和扩展位图位图位置:01格式:定长类型:B16描述:如将位图的第一位设为1,表示使用扩展位图,否则表示只使用基本位图。

如使用某数据域,应在位图中将相应的位设位1,如使用41域,需将位图的41位设为1。

浅谈ISO8583协议数据加密和网络安全传输技术

浅谈ISO8583协议数据加密和网络安全传输技术
胡艳;郑路
【期刊名称】《信息通信》
【年(卷),期】2012(000)001
【摘要】随着话费充值和支竹业务的快速发展,电信运营商通过话费来完成小额支付的传统模式已经无法满足客户需求,而与银行系统对接、直接采用银行卡进行支付已成为趋势.然而,基于互联网和本地局域网上的黑客攻击也与日俱增,其中网络监听就有可能造成用户交易信息的泄露,导致客户和运营商的利益受到损失.本文就从金融业普遍使用的ISO8535协议使用规范、基于.NET加密机制和网络安全传输方式三个方面来进行探讨.
【总页数】2页(P143-144)
【作者】胡艳;郑路
【作者单位】中国电信武汉分公司,湖北武汉430032;中国电信武汉分公司,湖北武汉430032
【正文语种】中文
【中图分类】TP393.08
【相关文献】
1.浅谈数据加密技术在计算机网络安全中的应用 [J], 朱昱州
2.浅谈数据加密技术在计算机网络安全中的应用意义 [J], 麦海荣
3.浅谈网络安全协议SSL协议和SET协议 [J], 钟萍;李美村
4.浅谈数据加密在计算机网络安全中的应用 [J],
5.浅谈数据加密技术在计算机网络安全中的应用价值 [J], 陈晓光
因版权原因,仅展示原文概要,查看原文内容请购买。

ISO8583报文协议详解

ISO8583报⽂协议详解ISO8583包(简称8583包)是⼀个国际标准的包格式,最多由128个字段域组成,每个域都有统⼀的规定,并有定长与变长之分。

8583包前⾯⼀段为位图,⽤来确定包的字段域组成情况。

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

1、位图描述如下:位图位置:1格式:定长类型:B16(⼆进制16位,16*8=128bit)描述:如将位图的第⼀位设为'1',表⽰使⽤扩展位图(128个域),否则表⽰只使⽤基本位图(64个域)。

如使⽤某数据域,应在位图中将相应的位设位'1',如使⽤41域,需将位图的41位设为'1'。

选⽤条件:如使⽤65到128域,需设位图域第⼀位为'1'2、每个域的定义如下:typedef struct ISO8583{int bit_flag; /*域数据类型0 -- string, 1 -- int, 2 -- binary*/char *data_name; /*域名*/int length; /*数据域长度*/int length_in_byte;/*实际长度(如果是变长)*/int variable_flag; /*是否变长标志0:否 2:2位变长, 3:3位变长*/int datatyp; /*0 -- string, 1 -- int, 2 -- binary*/char *data; /*存放具体值*/int attribute; /*保留*/} ISO8583;ISO8583 Tbl8583[128] ={/* FLD 1 */ {0,"BIT MAP,EXTENDED ", 8, 0, 0, 2, NULL,0},/* FLD 2 */ {0,"PRIMARY ACCOUNT NUMBER ", 22, 0, 2, 0, NULL,0},/* FLD 3 */ {0,"PROCESSING CODE ", 6, 0, 0, 0, NULL,0},/* FLD 4 */ {0,"AMOUNT, TRANSACTION ", 12, 0, 0, 1, NULL,0},/* FLD 5 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},/* FLD 6 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},/* FLD 7 */ {0,"TRANSACTION DATE AND TIME ", 10, 0, 0, 0, NULL,0},/* FLD 8 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},/* FLD 9 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},/* FLD 10 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},/* FLD 11 */ {0,"SYSTEM TRACE AUDIT NUMBER ", 6, 0, 0, 1, NULL,0},/* FLD 12 */ {0,"TIME, LOCAL TRANSACTION ", 6, 0, 0, 0, NULL,0},/* FLD 13 */ {0,"DATE, LOCAL TRANSACTION ", 4, 0, 0, 0, NULL,0},/* FLD 14 */ {0,"DATE, EXPIRATION ", 4, 0, 0, 0, NULL,0},/* FLD 15 */ {0,"DATE, SETTLEMENT ", 4, 0, 0, 0, NULL,0},/* FLD 16 */ {0,"NO USE ", 4, 0, 0, 0, NULL,0},/* FLD 17 */ {0,"DATE, CAPTURE ", 4, 0, 0, 0, NULL,0},/* FLD 18 */ {0,"MERCHANT'S TYPE ", 4, 0, 0, 0, NULL,0},/* FLD 19 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 20 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 21 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 22 */ {0,"POINT OF SERVICE ENTRY MODE ", 3, 0, 0, 0, NULL,0},/* FLD 23 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 24 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 25 */ {0,"POINT OF SERVICE CONDITION CODE ", 2, 0, 0, 0, NULL,0},/* FLD 26 */ {0,"NO USE ", 2, 0, 0, 0, NULL,0},/* FLD 27 */ {0,"NO USE ", 1, 0, 0, 0, NULL,0},/* FLD 28 */ {0,"field27 ", 6, 0, 0, 0, NULL,0},/* FLD 29 */ {0,"NO USE ", 8, 0, 1, 0, NULL,0},/* FLD 30 */ {0,"NO USE ", 8, 0, 1, 0, NULL,0},/* FLD 31 */ {0,"NO USE ", 8, 0, 1, 0, NULL,0},/* FLD 32 */ {0,"ACQUIRER INSTITUTION ID. CODE ", 11, 0, 2, 0, NULL,0},/* FLD 33 */ {0,"FORWARDING INSTITUTION ID. CODE ", 11, 0, 2, 0, NULL,0},/* FLD 34 */ {0,"NO USE ", 28, 0, 2, 0, NULL,0},/* FLD 35 */ {0,"TRACK 2 DATA ", 37, 0, 2, 0, NULL,0},/* FLD 37 */ {0,"RETRIEVAL REFERENCE NUMBER ", 12, 0, 0, 0, NULL,0},/* FLD 38 */ {0,"AUTH. IDENTIFICATION RESPONSE ", 6, 0, 0, 0, NULL,0},/* FLD 39 */ {0,"RESPONSE CODE ", 2, 0, 0, 0, NULL,0},/* FLD 40 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 41 */ {0,"CARD ACCEPTOR TERMINAL ID. ", 8, 0, 0, 0, NULL,0},/* FLD 42 */ {0,"CARD ACCEPTOR IDENTIFICATION CODE ", 15, 0, 0, 0, NULL,0}, /* FLD 43 */ {0,"CARD ACCEPTOR NAME LOCATION ", 40, 0, 0, 0, NULL,0},/* FLD 44 */ {0,"ADDITIONAL RESPONSE DATA ", 25, 0, 2, 0, NULL,0},/* FLD 45 */ {0,"NO USE ", 76, 0, 2, 0, NULL,0},/* FLD 46 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 47 */ {0,"field47 ",999, 0, 3, 0, NULL,0},/* FLD 48 */ {0,"ADDITIONAL DATA --- PRIVATE ",999, 0, 3, 0, NULL,0},/* FLD 49 */ {0,"CURRENCY CODE,TRANSACTION ", 3, 0, 0, 0, NULL,0},/* FLD 50 */ {0,"CURRENCY CODE,SETTLEMENT ", 3, 0, 0, 0, NULL,0},/* FLD 51 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 52 */ {0,"PERSONAL IDENTIFICATION NUMBER DATA ", 8, 0, 0, 2, NULL,0}, /* FLD 53 */ {0,"SECURITY RELATED CONTROL INformATION", 16, 0, 0, 0, NULL,0}, /* FLD 54 */ {0,"ADDITIONAL AMOUNTS ",120, 0, 3, 0, NULL,0},/* FLD 55 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 56 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 57 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 58 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 59 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 60 */ {0,"NO USE ", 5, 0, 3, 0, NULL,0},/* FLD 61 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 62 */ {0,"NO USE ", 11, 0, 3, 0, NULL,0},/* FLD 63 */ {0,"NO USE ", 11, 0, 3, 0, NULL,0},/* FLD 64 */ {0,"MESSAGE AUTHENTICATION CODE FIELD ", 8, 0, 0, 2, NULL,0},/* FLD 65 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 66 */ {0,"NO USE ", 1, 0, 0, 0, NULL,0},/* FLD 67 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 68 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 69 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 70 */ {0,"SYSTEM MANAGEMENT INformATION CODE ", 3, 0, 0, 0, NULL,0}, /* FLD 71 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 72 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 73 */ {0,"NO USE ", 6, 0, 0, 0, NULL,0},/* FLD 74 */ {0,"NUMBER OF CREDITS ", 10, 0, 0, 0, NULL,0},/* FLD 75 */ {0,"REVERSAL NUMBER OF CREDITS ", 10, 0, 0, 0, NULL,0},/* FLD 76 */ {0,"NUMBER OF DEBITS ", 10, 0, 0, 0, NULL,0},/* FLD 77 */ {0,"REVERSAL NUMBER OF DEBITS ", 10, 0, 0, 0, NULL,0},/* FLD 78 */ {0,"NUMBER OF TRANSFER ", 10, 0, 0, 0, NULL,0},/* FLD 79 */ {0,"REVERSAL NUMBER OF TRANSFER ", 10, 0, 0, 0, NULL,0},/* FLD 80 */ {0,"NUMBER OF INQUIRS ", 10, 0, 0, 0, NULL,0},/* FLD 81 */ {0,"AUTHORIZATION NUMBER ", 10, 0, 0, 0, NULL,0},/* FLD 82 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},/* FLD 83 */ {0,"CREDITS,TRANSCATION FEEAMOUNT ", 12, 0, 0, 0, NULL,0},/* FLD 84 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},/* FLD 85 */ {0,"DEBITS,TRANSCATION FEEAMOUNT ", 12, 0, 0, 0, NULL,0},/* FLD 86 */ {0,"AMOUNT OF CREDITS ", 16, 0, 0, 0, NULL,0},/* FLD 87 */ {0,"REVERSAL AMOUNT OF CREDITS ", 16, 0, 0, 0, NULL,0},/* FLD 88 */ {0,"AMOUNT OF DEBITS ", 16, 0, 0, 0, NULL,0},/* FLD 89 */ {0,"REVERSAL AMOUNT OF DEBITS ", 16, 0, 0, 0, NULL,0},/* FLD 90 */ {0,"ORIGINAL DATA ELEMENTS ", 42, 0, 0, 0, NULL,0},/* FLD 91 */ {0,"FILE UPDATE CODE ", 1, 0, 0, 0, NULL,0},/* FLD 92 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 93 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 94 */ {0,"SERVICE INDICATOR ", 7, 0, 0, 0, NULL,0},/* FLD 95 */ {0,"REPLACEMENT AMOUNTS ", 42, 0, 0, 0, NULL,0},/* FLD 96 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},/* FLD 97 */ {0,"AMOUNT OF NET SETTLEMENT ", 16, 0, 0, 0, NULL,0},/* FLD 98 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 99 */ {0,"SETTLEMENT INSTITUTION ID ", 11, 0, 2, 0, NULL,0},/* FLD 100 */ {0,"RECVEING INSTITUTION ID ", 11, 0, 2, 0, NULL,0},/* FLD 101 */ {0,"FILENAME ", 17, 0, 2, 0, NULL,0},/* FLD 102 */ {0,"ACCOUNT IDENTIFICATION1 ", 28, 0, 2, 0, NULL,0},/* FLD 103 */ {0,"ACCOUNT IDENTIFICATION2 ", 28, 0, 2, 0, NULL,0},/* FLD 105 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 106 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 107 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 108 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 109 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 110 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 111 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 112 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 113 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 114 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 115 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 116 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 117 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 118 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 119 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 120 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 121 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 122 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 123 */ {0,"NEW PIN DATA ", 8, 0, 3, 2, NULL,0},/* FLD 124 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 125 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 126 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 127 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 128 */ {0,"MESSAGE AUTHENTICATION CODE FIELD ", 8, 0, 0, 2, NULL,0}, };3、变长,定长域说明如第⼆域:域名为主帐号,数据类型为string长度为22(是长长度不得超过此数)是个2位变长域由于是2位变长,在打包时需在数据域前加上数据的实际长度,如为19位,则表⽰为:19+数据值(即前两位为长度)如第三域:域名为处理码,数据类型为string长度为6是个定长域必须填满6位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ISO8583报文协议最开始时,金融系统只有IBM这些大的公司来提供设备,象各种主机与终端等。

在各个计算机设备之间,需要交换数据。

我们知道数据是通过网络来传送的,而在网络上传送的数据都是基于0或1这样的二进制数据,如果没有对数据进行编码,则这些数据没有人能够理解,属于没有用的数据。

起初的X.25、SDLC 以及现在流行的TCP/IP网络协议都提供底层的通讯编码协议,它们解决了最底层的通讯问题,能够将一串字符从一个地方传送到另一个地方。

但是,仅仅传送字符串是没有太大意义的,怎样来解析字符串代表什么内容是非常重要的,否则传送一些“0123abcd”的字符串也是无用的乱码。

让我们随着时光回到几十年前的某个时刻,假设我们被推到历史的舞台上,由我们来设计一个通用报文协议,来解决金融系统之间的报文交换,暂且称该协议叫做ISO8583协议。

此时,技术是在不断的前行,当初IBM一支独秀的局面好像已经不妙了,各种大小不一的公司都进入金融行业以求能有所斩获,呈一片百花齐放的局面。

我们怎样来设计一个报文协议,能够将这些如雨后春笋般出现的所有公司都纳入进来,其实也不是一件很简单的事。

我们还是先一步步的来考虑吧。

金融行业其实涉及到的数据内容并不是成千上万,无法统计,恰恰相反,是比较少的。

我们都可以在心底数得过来,象交易类型、帐号、帐户类型、密码、交易金额、交易手续费、日期时间、商户代码、2磁3磁数据、交易序列号等,把所有能够总结出来的都总结起来不过100个左右的数据。

那我们可以首先简单的设计ISO8583,定义128个字段,将所有能够考虑到的类似上面提到的“帐号”等金融数据类型,按照一个顺序排起来,分别对应128个字段中的一个字段。

每个数据类型占固定的长度,这个顺序和长度我们都事先定义好。

这样就简单了,要发送一个报文时,就将128个字段按照顺序接起来,然后将接起来的整串数据包发送出去。

任何金融软件收到ISO8583包后,直接按照我们定义的规范解包即可,因为整个报文的128个字段从哪一位到哪一位代表什么,大家都知道,只要知道你的数据包是ISO8583包即可,我们都已经定义好了。

比如第1个字段是“交易类型”,长度为4位,第2个字段位是“帐号”,为19位等等。

接收方就可以先取4位,再取接着的19位,依次类推,直到整个数据包128个字段都解完为止。

其实这种做法真是简单直接,基本上就可以满足需要了。

不过我们有几个问题要思考下:1、我怎么知道每个字段的数据类型呢,是数字还是字符?2、每个传送的报文都把128个字段都传过去,那网络带宽能够承受得了,有时候我可能只需要其中5个字段,结果多收到了123个无用的字段。

3、如果我某些字段的长度不固定,属于变长怎么办,因为你现在解包是当作数据包每个字段都是固定的,用C语言解包时直接依靠指针取固定长度的一串字符做为一个字段。

我们来一一解决这些问题。

第一个问题简单,我在定义ISO8583时除了定义每个字段表示什么,还规定其内容是数字或是字符等即可。

考虑可能出现的类型不过有以下几种:字母、数字、特殊字符、年月日等时间、二进制数据。

比如我对128个字段中的“商户类型”字段定义其长度是15,同时定义其类型为字母。

再精细点,如果“商户类型”里面的数据同时包括数字和字母呢?那我们就定义其类型为字母也可,为数字也可,即一个字段可以同时属于多个类型。

第二个问题稍微复杂点。

其本质就是如果我只传128个字段的5个字段,接收方怎么知道我传了哪几个字段给它了。

要是我们把剩下的123全部填成0或其他特殊标识,标明该字段不需要使用?这种处理方法没有半点用处,没有解决网络带宽的本质问题,还是要传128个字段。

换个思路,我在报文前面加上个包头,包头里面包含的信息能够让别人知道只传了5个字段。

怎样设计这个包头,可以这样,我们用16个字节,即128个bit(一个字节等于8bit)来表示128个字段中的某个字段是否存在。

每个bit在计算机的二进制里面不是1就是0,如果是1就表示对应的字段在本次报文中存在,如果是0就是不存在。

这样好了,如果别人接收到了ISO8583报文,可以先根据最前面的报文头,就知道紧接着报文头后面的报文有哪些字段,没有哪些字段了。

比如,我要发送5个字段,分别属于128个字段中的第2、3、6、8、9字段,我就可以将128bit的报文头填成011001011000000000………..,一共128个bit,后面就全是0了。

注意其中第2、3、6、8、9位为1,其他都为0。

有了这个128bit的报文头,我们就可以只发送需要的5个字段了。

怎样组织报文?先放上这128bit,即16个字节的头,然后在头后面放2、3、6、8、9字段,这些字段紧挨在一起,3和6之间也不需要填上4、5这两个字段了。

接收方收到这个报文,它会根据128bit 的报文头来解包,它自然知道把第3个字段取出后,就直接在第3字段的后面取第6个字段,每个字段的长度在ISO8583里面都定义好了,很轻松就把数据包解出来了。

这下好了,为了解决上面的第二问题,我们只是在报文中增加了16个字节的数据,就轻松搞定了,我们把这16个字节称为bit map,即位图,用来表示某个位是否存在。

不过我们再稍微优化一下,考虑到很多时候报文不需要128个字段这么多,其一半64个字段都不一定能够用完。

那我可以将报文头由128bit减到64bit,只有在需要的时候才把剩下的64bit放到报文里面,这样报文长度不又少了8个字节吗?是个好主意。

我们把ISO8583的128个字段中最常见的都放到前64个字段中,那我们可以将处理缩小一倍。

这样我一般发送报文时只需发送64bit,即一个字节的报文头,再加上需要的几个字段就可以了。

如果有些报文用到64到128之间的字段呢?这个也好办,我把64bit报文头的第一位bit用来代表特殊含义,如果该bit为1,则表示64bit后面跟了剩下的64bit报文头;如果第一位bit为0,则表示64bit后面没有跟剩下的64bit报文头,直接是128个字段中的报文了。

那们,接收方会判断一下报头的第一个bit是1还是0,从而知道报文头是64bit还是128bit了,就可以做相应处理。

因为报文头第二个64bit属于有时候有,所以我们叫它Extended bit map扩展位图,相应的报文头最开始的64bit我们叫它Primary bit map主位图。

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

第三个问题可以考虑这样解决。

比如第2个字段是“帐号”,是不定长的,可能有的银行帐号是19位,有的是17位等。

我们定ISO8583规范时可以规定第2个字段是25位,这下足够将19和17的情况都包含进来,但是如果以后出现了30位的怎么办?那我们现在将字段定为100位。

以后超过100位怎么办,况且如果你只有19位的帐号,我们定义了100位,那81位的数据不是浪费了网络的带宽。

看来预先定义一个我们认为比较大的位数是不太好的。

我们这样,对于第2个字段“帐号”,在字段的开头加上“帐号”的长度。

比如帐号是0123456789,一共10位,我们变成100123456789,注意前面多了个10,表示后面的10位为帐号。

如果你接触过COM里面的BSTR,应该对这种处理比较熟悉了。

接收方收到该字段后,它知道ISO8583规定第2个字段“帐号”是变长的,所以会先取前面的2位出来,获取其值,此时为长度,然后根据该长度值知道应该拷贝该字段后面哪几位数据,才是真正的帐号。

如果你觉得长度如果只有两位最多只能表示99位长,不太够,我们也定义可以允许前面3位都为长度的变长字段,这样就有999位长,应该够了吧。

在规范里面如果我定义某个字段的属性是“LLVAR”,你注意了,其中的LL表示长度,VAR表示后面的数据,两个LL表示两位长,最大是99,如果是三位就是“LLLVAR”,最大是999。

这样看我们定义的ISO8583规范文档时直接根据这几个字母就理解某个变长字段的意思了。

该解决的几个问题到这里都解决了,我们来回顾下自己设计的ISO8583规范。

其实没有什么,无非是把金融行业可能出现的数据分门别类,排好顺序,接着把它们连接起来,组成一个报文发送出去而已。

其中针对该报文的设计进行了一些优化,引入了bit map位图的概念,也算是一个不错的想法。

剩下的工作就简单了,我们就直接收集金融行业可能出现的数据字段类型,分成128个字段类型,如果没有到128个这么多就先保留一些下来,另外考虑到有些人有特殊的要求,我们规定可以将128个字段中的几个字段你自己来定义其内容,也算是一种扩展了。

这样,最后我们就得到了ISO8583规范的那张字段描述表了。

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

8583包前面一段为位图,用来确定包的字段域组成情况。

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

1、位图描述如下:位图位置:1格式:定长类型:B16(二进制16位,16*8=128bit)描述:如将位图的第一位设为'1',表示使用扩展位图(128个域),否则表示只使用基本位图(64个域)。

如使用某数据域,应在位图中将相应的位设位'1',如使用41域,需将位图的41位设为'1'。

选用条件:如使用65到128域,需设位图域第一位为'1'2、每个域的定义如下:typedef struct ISO8583{int bit_flag; /*域数据类型0 -- string, 1 -- int, 2 -- binary*/char *data_name; /*域名*/int length; /*数据域长度*/int length_in_byte;/*实际长度(如果是变长)*/int variable_flag; /*是否变长标志0:否2:2位变长, 3:3位变长*/int datatyp; /*0 -- string, 1 -- int, 2 -- binary*/char *data; /*存放具体值*/int attribute; /*保留*/} ISO8583;ISO8583 Tbl8583[128] ={/* FLD 1 */ {0,"BIT MAP,EXTENDED ", 8, 0, 0, 2, NULL,0},/* FLD 2 */ {0,"PRIMARY ACCOUNT NUMBER ", 22, 0, 2, 0, NULL,0},/* FLD 3 */ {0,"PROCESSING CODE ", 6, 0, 0, 0, NULL,0},/* FLD 4 */ {0,"AMOUNT, TRANSACTION ", 12, 0, 0, 1, NULL,0},/* FLD 5 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},/* FLD 6 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},/* FLD 7 */ {0,"TRANSACTION DATE AND TIME ", 10, 0, 0, 0, NULL,0},/* FLD 8 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},/* FLD 9 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},/* FLD 10 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},/* FLD 11 */ {0,"SYSTEM TRACE AUDIT NUMBER ", 6, 0, 0, 1, NULL,0},/* FLD 12 */ {0,"TIME, LOCAL TRANSACTION ", 6, 0, 0, 0, NULL,0},/* FLD 13 */ {0,"DATE, LOCAL TRANSACTION ", 4, 0, 0, 0, NULL,0},/* FLD 14 */ {0,"DATE, EXPIRATION ", 4, 0, 0, 0, NULL,0},/* FLD 15 */ {0,"DATE, SETTLEMENT ", 4, 0, 0, 0, NULL,0},/* FLD 16 */ {0,"NO USE ", 4, 0, 0, 0, NULL,0},/* FLD 17 */ {0,"DATE, CAPTURE ", 4, 0, 0, 0, NULL,0},/* FLD 18 */ {0,"MERCHANT'S TYPE ", 4, 0, 0, 0, NULL,0},/* FLD 19 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 20 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 21 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 22 */ {0,"POINT OF SERVICE ENTRY MODE ", 3, 0, 0, 0, NULL,0},/* FLD 23 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 24 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 25 */ {0,"POINT OF SERVICE CONDITION CODE ", 2, 0, 0, 0, NULL,0}, /* FLD 26 */ {0,"NO USE ", 2, 0, 0, 0, NULL,0},/* FLD 27 */ {0,"NO USE ", 1, 0, 0, 0, NULL,0},/* FLD 28 */ {0,"field27 ", 6, 0, 0, 0, NULL,0},/* FLD 29 */ {0,"NO USE ", 8, 0, 1, 0, NULL,0},/* FLD 30 */ {0,"NO USE ", 8, 0, 1, 0, NULL,0},/* FLD 31 */ {0,"NO USE ", 8, 0, 1, 0, NULL,0},/* FLD 32 */ {0,"ACQUIRER INSTITUTION ID. CODE ", 11, 0, 2, 0, NULL,0},/* FLD 33 */ {0,"FORWARDING INSTITUTION ID. CODE ", 11, 0, 2, 0,NULL,0},/* FLD 34 */ {0,"NO USE ", 28, 0, 2, 0, NULL,0},/* FLD 35 */ {0,"TRACK 2 DATA ", 37, 0, 2, 0, NULL,0},/* FLD 36 */ {0,"TRACK 3 DATA ",104, 0, 3, 0, NULL,0},/* FLD 37 */ {0,"RETRIEVAL REFERENCE NUMBER ", 12, 0, 0, 0, NULL,0}, /* FLD 38 */ {0,"AUTH. IDENTIFICATION RESPONSE ", 6, 0, 0, 0, NULL,0}, /* FLD 39 */ {0,"RESPONSE CODE ", 2, 0, 0, 0, NULL,0},/* FLD 40 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 41 */ {0,"CARD ACCEPTOR TERMINAL ID. ", 8, 0, 0, 0, NULL,0},/* FLD 42 */ {0,"CARD ACCEPTOR IDENTIFICATION CODE ", 15, 0, 0, 0, NULL,0},/* FLD 43 */ {0,"CARD ACCEPTOR NAME LOCATION ", 40, 0, 0, 0, NULL,0}, /* FLD 44 */ {0,"ADDITIONAL RESPONSE DATA ", 25, 0, 2, 0, NULL,0},/* FLD 45 */ {0,"NO USE ", 76, 0, 2, 0, NULL,0},/* FLD 46 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 47 */ {0,"field47 ",999, 0, 3, 0, NULL,0},/* FLD 48 */ {0,"ADDITIONAL DATA --- PRIVATE ",999, 0, 3, 0, NULL,0},/* FLD 49 */ {0,"CURRENCY CODE,TRANSACTION ", 3, 0, 0, 0, NULL,0},/* FLD 50 */ {0,"CURRENCY CODE,SETTLEMENT ", 3, 0, 0, 0, NULL,0},/* FLD 51 */ {0,"NO USE ", 3, 0, 0, 0, NULL,0},/* FLD 52 */ {0,"PERSONAL IDENTIFICATION NUMBER DATA ", 8, 0, 0, 2, NULL,0},/* FLD 53 */ {0,"SECURITY RELATED CONTROL INformATION", 16, 0, 0, 0, NULL,0},/* FLD 54 */ {0,"ADDITIONAL AMOUNTS ",120, 0, 3, 0, NULL,0},/* FLD 55 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 56 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 57 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 58 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 59 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 60 */ {0,"NO USE ", 5, 0, 3, 0, NULL,0},/* FLD 61 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 62 */ {0,"NO USE ", 11, 0, 3, 0, NULL,0},/* FLD 63 */ {0,"NO USE ", 11, 0, 3, 0, NULL,0},/* FLD 64 */ {0,"MESSAGE AUTHENTICATION CODE FIELD ", 8, 0, 0, 2, NULL,0},/* FLD 65 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 66 */ {0,"NO USE ", 1, 0, 0, 0, NULL,0},/* FLD 67 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 68 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 69 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 70 */ {0,"SYSTEM MANAGEMENT INformATION CODE ", 3, 0, 0, 0, NULL,0},/* FLD 71 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 73 */ {0,"NO USE ", 6, 0, 0, 0, NULL,0},/* FLD 74 */ {0,"NUMBER OF CREDITS ", 10, 0, 0, 0, NULL,0},/* FLD 75 */ {0,"REVERSAL NUMBER OF CREDITS ", 10, 0, 0, 0, NULL,0},/* FLD 76 */ {0,"NUMBER OF DEBITS ", 10, 0, 0, 0, NULL,0},/* FLD 77 */ {0,"REVERSAL NUMBER OF DEBITS ", 10, 0, 0, 0, NULL,0},/* FLD 78 */ {0,"NUMBER OF TRANSFER ", 10, 0, 0, 0, NULL,0},/* FLD 79 */ {0,"REVERSAL NUMBER OF TRANSFER ", 10, 0, 0, 0, NULL,0}, /* FLD 80 */ {0,"NUMBER OF INQUIRS ", 10, 0, 0, 0, NULL,0},/* FLD 81 */ {0,"AUTHORIZATION NUMBER ", 10, 0, 0, 0, NULL,0},/* FLD 82 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},/* FLD 83 */ {0,"CREDITS,TRANSCATION FEEAMOUNT ", 12, 0, 0, 0, NULL,0},/* FLD 84 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},/* FLD 85 */ {0,"DEBITS,TRANSCATION FEEAMOUNT ", 12, 0, 0, 0, NULL,0}, /* FLD 86 */ {0,"AMOUNT OF CREDITS ", 16, 0, 0, 0, NULL,0},/* FLD 87 */ {0,"REVERSAL AMOUNT OF CREDITS ", 16, 0, 0, 0, NULL,0},/* FLD 88 */ {0,"AMOUNT OF DEBITS ", 16, 0, 0, 0, NULL,0},/* FLD 89 */ {0,"REVERSAL AMOUNT OF DEBITS ", 16, 0, 0, 0, NULL,0},/* FLD 90 */ {0,"ORIGINAL DATA ELEMENTS ", 42, 0, 0, 0, NULL,0},/* FLD 91 */ {0,"FILE UPDATE CODE ", 1, 0, 0, 0, NULL,0},/* FLD 92 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 93 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 94 */ {0,"SERVICE INDICATOR ", 7, 0, 0, 0, NULL,0},/* FLD 95 */ {0,"REPLACEMENT AMOUNTS ", 42, 0, 0, 0, NULL,0},/* FLD 96 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},/* FLD 97 */ {0,"AMOUNT OF NET SETTLEMENT ", 16, 0, 0, 0, NULL,0},/* FLD 98 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 99 */ {0,"SETTLEMENT INSTITUTION ID ", 11, 0, 2, 0, NULL,0},/* FLD 100 */ {0,"RECVEING INSTITUTION ID ", 11, 0, 2, 0, NULL,0},/* FLD 101 */ {0,"FILENAME ", 17, 0, 2, 0, NULL,0},/* FLD 102 */ {0,"ACCOUNT IDENTIFICATION1 ", 28, 0, 2, 0, NULL,0},/* FLD 103 */ {0,"ACCOUNT IDENTIFICATION2 ", 28, 0, 2, 0, NULL,0},/* FLD 104 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 105 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 106 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 107 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 108 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 109 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 110 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 111 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 112 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 113 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 114 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 116 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 117 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 118 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 119 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 120 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 121 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 122 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 123 */ {0,"NEW PIN DATA ", 8, 0, 3, 2, NULL,0},/* FLD 124 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 125 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 126 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 127 */ {0,"NO USE ",999, 0, 3, 0, NULL,0},/* FLD 128 */ {0,"MESSAGE AUTHENTICATION CODE FIELD ", 8, 0, 0, 2, NULL,0},};3、变长,定长域说明如第二域:域名为主帐号,数据类型为string长度为22(是长长度不得超过此数)是个2位变长域由于是2位变长,在打包时需在数据域前加上数据的实际长度,如为19位,则表示为:19+数据值(即前两位为长度)如第三域:域名为处理码,数据类型为string长度为6是个定长域必须填满6位。

相关文档
最新文档