最开始时,金融系统只有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个字段。怎样设计这个包头,可以这样,我们用2个字节,即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,即2个字节的头,然后在头后面放2、3、6、8、9字段,这些字段紧挨在一起,3和6之间也不需要填上4、5这两个字段了。接收方收到这个报文,它会根据128bit的报文头来解包,它自然知道把第3个字段取出后,就直接在第3字段的后面取第6个字段,每个字段的长度在ISO8583里面都定义好了,很轻松就把数据包解出来了。

这下好了,为了解决上面的第二问题,我们只是在报文中增加了2个字节的数据,就轻松搞定了,我们把这2个字节称为bit map,即位图,用来表示某个位是否存在。不过我们再稍微优化一下,考虑到很多时候报文不需要128个字段这么多,其一半64个字段都不一定能够用完。那我可以将报文头由128bit减到64bit,只有在需要的时候才把剩下的64bit放到报文里面,这样报文长度不又少了1个字节吗?

是个好主意。我们把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、每个域的定义如下:
typedefstructISO8583
{
intbit_flag;/*域数据类型0--string,1--int,2--binary*/
char*data_name;/*域名*/
intlength;/*数据域长度*/
intlength_in_byte;/*实际长度(如果是变长)*/
intvariable_flag;/*是否变长标志0:否2:2位变长,3:3位变长*/
intdatatyp;/*0--string,1--int,2--binary*/
char*data;/*存放具体值*/
intattribute;/*保留*/
}ISO8583;

整体结构如下所示:

ISO8583Tbl8583[128]=
{
/*FLD1*/{0,"BITMAP,EXTENDED",8,0,0,2,NULL,0},
/*FLD2*/{0,"PRIMARYACCOUNTNUMBER",22,0,2,0,NULL,0},
/*FLD3*/{0,"PROCESSINGCODE",6,0,0,0,NULL,0},
/*FLD4*/{0,"AMOUNT,TRANSACTION",12,0,0,1,NULL,0},
/*FLD5*/{0,"NOUSE",12,0,0,0,NULL,0},
/*FLD6*/{0,"NOUSE",12,0,0,0,NULL,0},
/*FLD7*/{0,"TRANSACTIONDATEANDTIME",10,0,0,0,NULL,0},
/*FLD8*/{0,"NOUSE",8,0,0,0,NULL,0},
/*FLD9*/{0,"NOUSE",8,0,0,0,NULL,0},
/*FLD10*/{0,"NOUSE",8,0,0,0,NULL,0},
/*FLD11*/{0,"SYSTEMTRACEAUDITNUMBER",6,0,0,1,NULL,0},
/*FLD12*/{0,"TIME,LOCALTRANSACTION",6,0,0,0,NULL,0},
/*FLD13*/{0,"DATE,LOCALTRANSACTION",4,0,0,0,NULL,0},
/*FLD14*/{0,"DATE,EXPIRATION",4,0,0,0,NULL,0},
/*FLD15*/{0,"DATE,SETTLEMENT",4,0,0,0,NULL,0},
/*FLD16*/{0,"NOUSE",4,0,0,0,NULL,0},
/*FLD17*/{0,"DATE,CAPTURE",4,0,0,0,NULL,0},
/*FLD18*/{0,"MERCHANT'STYPE",4,0,0,0,NULL,0},
/*FLD19*/{0,"NOUSE",3,0,0,0,NULL,0},
/*FLD20*/{0,"NOUSE",3,0,0,0,NULL,0},
/*FLD21*/{0,"NOUSE",3,0,0,0,NULL,0},
/*FLD22*/{0,"POINTOFSERVICEENTRYMODE",3,0,0,0,NULL,0},
/*FLD23*/{0,"NOUSE",3,0,0,0,NULL,0},
/*FLD24*/{0,"NOUSE",3,0,0,0,NULL,0},
/*FLD25*/{0,"POINTOFSERVICECONDITIONCODE",2,0,0,0,NULL,0},
/*FLD26*/{0,"NOUSE",2,0,0,0,NULL,0},
/*FLD27*/{0,"NOUSE",1,0,0,0,NULL,0},
/*FLD28*/{0,"field27",6,0,0,0,NULL,0},
/*FLD29*/{0,"NOUSE",8,0,1,0,NULL,0},
/*FLD30*/{0,"NOUSE",8,0,1,0,NULL,0},
/*FLD31*/{0,"NOUSE",8,0,1,0,NULL,0},
/*FLD32*/{0,"ACQUIRERINSTITUTIONID.CODE",11,0,2,0,NULL,0},
/*FLD33*/{0,"FORWARDINGINSTITUTIONID.CODE",11,0,2,0,NULL,0},
/*FLD34*/{0,"NOUSE",28,0,2,0,NULL,0},
/*FLD35*/{0,"TRACK2DATA",37,0,2,0,NULL,0},
/*FLD36*/{0,"TRACK3DATA",104,0,3,0,NULL,0},
/*FLD37*/{0,"RETRIEVALREFERENCENUMBER",12,0,0,0,NULL,0},
/*FLD38*/{0,"AUTH.IDENTIFICATIONRESPONSE",6,0,0,0,NULL,0},
/*FLD39*/{0,"RESPONSECODE",2,0,0,0,NULL,0},
/*FLD40*/{0,"NOUSE",3,0,0,0,NULL,0},
/*FLD41*/{0,"CARDACCEPTORTERMINALID.",8,0,0,0,NULL,0},
/*FLD42*/{0,"CARDACCEPTORIDENTIFICATIONCODE",15,0,0,0,NULL,0},
/*FLD43*/{0,"CARDACCEPTORNAMELOCATION",40,0,0,0,NULL,0},
/*FLD44*/{0,"ADDITIONALRESPONSEDATA",25,0,2,0,NULL,0},
/*FLD45*/{0,"NOUSE",76,0,2,0,NULL,0},
/*FLD46*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD47*/{0,"field47",999,0,3,0,NULL,0},
/*FLD48*/{0,"ADDITIONALDATA---PRIVATE",999,0,3,0,NULL,0},
/*FLD49*/{0,"CURRENCYCODE,TRANSACTION",3,0,0,0,NULL,0},
/*FLD50*/{0,"CURRENCYCODE,SETTLEMENT",3,0,0,0,NULL,0},
/*FLD51*/{0,"NOUSE",3,0,0,0,NULL,0},
/*FLD52*/{0,"PERSONALIDENTIFICATIONNUMBERDATA",8,0,0,2,NULL,0},
/*FLD53*/{0,"SECURITYRELATEDCONTROLINformATION",16,0,0,0,NULL,0},
/*FLD54*/{0,"ADDITIONALAMOUNTS",120,0,3,0,NULL,0},
/*FLD55*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD56*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD57*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD58*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD59*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD60*/{0,"NOUSE",5,0,3,0,NULL,0},
/*FLD61*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD62*/{0,"NOUSE",11,0,3,0,NULL,0},
/*FLD63*/{0,"NOUSE",11,0,3,0,NULL,0},
/*FLD64*/{0,"MESSAGEAUTHENTICATIONCODEFIELD",8,0,0,2,NULL,0},
/*FLD65*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD66*/{0,"NOUSE",1,0,0,0,NULL,0},
/*FLD67*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD68*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD69*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD70*/{0,"SYSTEMMANAGEMENTINformATIONCODE",3,0,0,0,NULL,0},
/*FLD71*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD72*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD73*/{0,"NOUSE",6,0,0,0,NULL,0},
/*FLD74*/{0,"NUMBEROFCREDITS",10,0,0,0,NULL,0},
/*FLD75*/{0,"REVERSALNUMBEROFCREDITS",10,0,0,0,NULL,0},
/*FLD76*/{0,"NUMBEROFDEBITS",10,0,0,0,NULL,0},
/*FLD77*/{0,"REVERSALNUMBEROFDEBITS",10,0,0,0,NULL,0},
/*FLD78*/{0,"NUMBEROFTRANSFER",10,0,0,0,NULL,0},
/*FLD79*/{0,"REVERSALNUMBEROFTRANSFER",10,0,0,0,NULL,0},
/*FLD80*/{0,"NUMBEROFINQUIRS",10,0,0,0,NULL,0},
/*FLD81*/{0,"AUTHORIZATIONNUMBER",10,0,0,0,NULL,0},
/*FLD82*/{0,"NOUSE",12,0,0,0,NULL,0},
/*FLD83*/{0,"CREDITS,TRANSCATIONFEEAMOUNT",12,0,0,0,NULL,0},
/*FLD84*/{0,"NOUSE",12,0,0,0,NULL,0},
/*FLD85*/{0,"DEBITS,TRANSCATIONFEEAMOUNT",12,0,0,0,NULL,0},
/*FLD86*/{0,"AMOUNTOFCREDITS",16,0,0,0,NULL,0},
/*FLD87*/{0,"REVERSALAMOUNTOFCREDITS",16,0,0,0,NULL,0},
/*FLD88*/{0,"AMOUNTOFDEBITS",16,0,0,0,NULL,0},
/*FLD89*/{0,"REVERSALAMOUNTOFDEBITS",16,0,0,0,NULL,0},
/*FLD90*/{0,"ORIGINALDATAELEMENTS",42,0,0,0,NULL,0},
/*FLD91*/{0,"FILEUPDATECODE",1,0,0,0,NULL,0},
/*FLD92*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD93*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD94*/{0,"SERVICEINDICATOR",7,0,0,0,NULL,0},
/*FLD95*/{0,"REPLACEMENTAMOUNTS",42,0,0,0,NULL,0},
/*FLD96*/{0,"NOUSE",8,0,0,0,NULL,0},
/*FLD97*/{0,"AMOUNTOFNETSETTLEMENT",16,0,0,0,NULL,0},
/*FLD98*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD99*/{0,"SETTLEMENTINSTITUTIONID",11,0,2,0,NULL,0},
/*FLD100*/{0,"RECVEINGINSTITUTIONID",11,0,2,0,NULL,0},
/*FLD101*/{0,"FILENAME",17,0,2,0,NULL,0},
/*FLD102*/{0,"ACCOUNTIDENTIFICATION1",28,0,2,0,NULL,0},
/*FLD103*/{0,"ACCOUNTIDENTIFICATION2",28,0,2,0,NULL,0},
/*FLD104*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD105*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD106*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD107*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD108*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD109*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD110*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD111*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD112*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD113*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD114*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD115*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD116*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD117*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD118*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD119*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD120*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD121*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD122*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD123*/{0,"NEWPINDATA",8,0,3,2,NULL,0},
/*FLD124*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD125*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD126*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD127*/{0,"NOUSE",999,0,3,0,NULL,0},
/*FLD128*/{0,"MESSAGEAUTHENTICATIONCODEFIELD",8,0,0,2,NULL,0},
};
3、变长,定长域说明
如第二域:域名为主帐号,
数据类型为string
长度为22(是长长度不得超过此数)
是个2位变长域
由于是2位变长,在打包时需在数据域前加上数据的实际长度,如为19位,则表示为:
19+数据值(即前两位为长度)

如第三域:域名为处理码,
数据类型为string
长度为6
是个定长域
必须填满6位。
附A:ISO8583各域段的说明
1,信息类型(messagetype)定义
位图位置:-
格式:定长
类型:N4
描述:
数据包的第一部分,定义数据包的类型。
数据类型由数据包的发起者设定,应遵循以下要求:
数据包开始部分必须是信息类型;
对不支持的信息类型能给出拒绝应答。
0100授权交易
0110授权交易答复
0200金融交易
0210金融交易答复
0240查询交易
0250查询交易答复
0400冲正交易
0410冲正交易答复
0800管理交易
0810管理交易答复

2,位图(BitMap)-基本位图和扩展位图
位图位置:1
格式:定长
类型:B16
描述:
如将位图的第一位设为'1',表示使用扩展位图,否则表示只使用基本位图。
如使用某数据域,应在位图中将相应的位设位'1',如使用41域,需将位图的41位设为'1'。
选用条件:如使用65到128域,需设位图域为'1'

3,Bit02主帐号(PrimaryAccountNumber)
位图位置:02
格式:变长,LLVAR
类型:N..22
描述:
唯一的确认一个用户交易的基本帐号。
由于银行电子服务系统涉及多个应用系统,而帐号长度最多为22位,故将原标准的19长度改为22位。

Bit03处理代码(ProcessingCode)
位图位置:03
格式:定长
类型:N6
描述:用于描述交易对客户帐户造成何种影响的代码。
处理代码和信息码一起可唯一定义一种交易的类型。
处理代码由以下三部分组成:
位置描述
1-2交易动作码
3-4付出帐户类型,用于借记类,如查询、代收费、转场交易。
5-6收入帐户类型,用于代收费、转帐等。

其中:
ff:付出帐户
tt:收入帐户
*视主机而定

5,Bit04交易金额(Amount,Transaction)
位图位置:04
格式:定长
类型:N12
描述:帐户人要求交易的交易金额,不含任何处理和交易费用。
金额的表示和货币代码有关,应能表示相应货币的最小单位。参ISO4217有关货币代码定义。
如“000000000100”用于表示美元,表示1.00元;如用于表示意大利货币,则表示100里拉。
对于查询等交易,应设交易金额为“000000000000”。

6,Bit06交易日期和时间TransmissionDateandTime
位图位置:07
格式:定长,MMDDhhmmss
类型:N10
描述:本地交易日期和时间

7,Bit11系统跟踪号(SystemsTraceAuditNumber)
位图位置:11
格式:定长
类型:N6
描述:终端交易的跟踪号码。
交易发起终端填写,和“交易日期、时间”、信息类型等合在一起可唯一定义某一个终端的唯一一笔交易。即是说,在同一天,对一终端,同一类交易的系统跟踪号应保证不同。系统跟踪号在交易过程中不能修改。使用此域来匹配请求和通知类交易的返回。
应用系统使用此域来检查收到的授权、金融、自动冲正、结算、管理和网管等类交易的应答包是否是其请求包的应答。
系统跟踪号不用于匹配自动冲正交易,也不用于在预授权消费时匹配前面的预授权交易。参90域。
对于银行电子服务系统,其系统跟踪号是交易流水号。

8,Bit12本地交易时间(Time,LocalTransaction)
位图位置:12
格式:定长,hhmmss
类型:N6
描述:交易在终端上发生的时间。
本地交易时间在交易处理过程中不能改变。在自动冲正,存贮转发时,本地交易时间不能改变。

9,Bit13本地交易日期(Date,LocalTransaction)
位图位置:13
格式:定长,MMDD
类型:N4
描述:交易在终端上发生的时间。
本地交易时间不能改变,在自动冲正、存储转发交易时,本地交易时间也不能改变。

10,Bit14有效期(Date,Expiration)
位图位置:14
格式:定长,YYMM
类型:N4
描述:卡的有效期,年年月月
由于卡类写磁格式不同,收单行可能提不出卡的有效期,授权机构从卡的二磁道中提取卡的有效期。如卡,无二磁道,收单行应要求手工录入卡的有效期。
选用条件:100、200、400等交易如没有2、3磁道时,一定要有此域。

11,Bit15结算日期(Date,Settlement)
位图位置:15
格式:定长,MMDD
类型:N4
描述:
银行电子服务系统和主机结算的时间,格式月月日日。
结帐日期前发生的交易参加当天结算。
在结算时,结帐日期也用于计算处理、交易费用。

12,Bit17获取日期(Date,Capture)
位图位置:17
格式:定长,MMDD
类型:N4
描述:从主机获取交易的记帐日期。通常用于主机和商户清算。

13,Bit18商户类型(Merchant'sType)
位图位置:18
格式:定长
类型:N4
描述:定义商户产品和服务类型的代码
商户类型用于金融、授权交易,用于指定服务点的类型。它主要有以下用途:
决定预授权交易得到确认的最长时间;
控制合法限额;
为交易授权处理,控制网络操作规则;
欺诈检测;
用于商户分类报表;
交易费用处理。
根据ISO8583标准,应使用相应的国家标准。
商户类型代码表如下:
商户类型代码行业类型说明
4215邮递服务
4511民航
4722旅游
4782过桥费
4789其他运输服务
4614电信服务
5542加油站
5812餐馆
5999购物
6010金融机构-人工现金支付
6011金融机构-自动现金支付
6012金融机构-各类服务
7011酒店、旅馆
7299各类个人服务:洗衣、美容、
7399各类商业服务:停车场、租车、广告、其他服务
7699各类维修服务:维修、洗车、拖车
7996娱乐:电影、剧院、体育、游戏
8099医疗服务
8111法律服务
8999各类专业服务:会计、教育、装修、工程

选用条件:服务点终端发起的交易一定要有此域。

14,Bit22服务点输入方式(Point-of-ServiceEntryMode)
位图位置:22
格式:定长
类型:N3
描述:在服务终端上定义PIN和PAN的输入方式。
服务点输入方式包含以下两个方面组合而成:
位置描述
1-2在服务终端上PAN有效期输入方式
3-3在服务终端上PIN的输入方式
PAN的输入方式编码如下:
PAN输入方式描述
00不知
01手工
02读磁卡
03条码扫描仪(BAR)
04光学符号阅读器(OCR)
05集成电路卡(IC卡)

PIN的输入方式编码如下:
PIN输入方式描述
0不知
1终端能接收PIN
2终端不能接收PIN

选用条件:服务点终端发起的交易一定要有此域。

15,Bit25服务点条件代码(Point-of-ServiceConditionCode)
位图位置:25
格式:定长
类型:N2
描述:定义交易发生的服务点类型
用法说明:下面是CYBERBANK支持的服务点条件代码。
服务点条件代码服务点终端类型
2自动柜员机(ATM)
10银行终端(10)
14POS
20电话银行

16,Bit32收单机构标识码(AcquirerinstitutionIdentification)
位图位置:32
格式:LLVAR
类型:N..11
描述:在金融交易中此域表示交易发生的银行机构的标识码
应答数据包必须和请求数据包此域相同。

17,Bit33向前机构标识码(ForwardingInstitutionIdentificationCode)
位图位置:33
格式:LLVAR
类型:N..11
描述:在金融交易中此域表示帐户所在的银行机构的标识码
在网管交易800/810中,本域含有交易发起机构的代码。
应答数据包必须和请求数据包此域相同。

18,Bit35二磁道数据(Track2Data)
位图位置:35
格式:LLVAR
类型:Z..37
描述:写在卡二磁道的数据。数据组成遵循ISO7811-1985标准,数据中包含域分隔符,但不包含卡启始、结束符、LRC等。
收卡行应检测卡的二磁道是否符合国际标准。
为支持国际交换收单行应将二磁道中的分隔符换为“=”。除此外不能对二磁道数据进行任何修改,如修改PAN的校验字、有效期、服务码等。

19,Bit36三磁道数据(Track3Data)
位图位置:36
格式:LLLVAR
类型:Z...104
描述:写在卡三磁道的数据。数据应组成遵循ISO4909标准,数据中包含域分隔符,但不包含卡启始、结束符、LRC等。
注意:长度说明为3位数字长。

20,Bit37检索索引号(RetrievalReferenceNumber)
位图位置:37
格式:定长
类型:AN12
描述:检索索引号用来在任何时间标识一个金融、授权、自动冲正交易。
检索索引号不要求打印在持卡人的帐单上。它的主要目的是在收单行和授权行之间定义一个数据项用于跟踪和检索交易。授权机构可以将检索索引号打印在客户的对帐单上。
检索索引号由收单行分配。
选用条件:可包含在收单机构的交易请求中。如在交易请求中有,则应答数据中一定应原样返回。

21,Bit38授权码(AuthorizationIdentification)
位图位置:38
格式:定长
类型:AN6
描述:交易授权机构返回的返回代码。
授权码用于在服务点终端上信用卡授权;
授权机构按网络操作规定,可选使用本域。

22,Bit39返回码(ResponseCode)
位图位置:39
格式:定长
类型:AN2
描述:对一交易定义其处理结果的编码。
返回码用于说明授权机构对金融(授权)交易的处理状态;也用来指明自动冲正交易的冲正原因;还用来指出目标主机已接收到文件修改、结算、管理、网管等交易请求。
返回码应尽可能准确,应尽可能描述清楚所遇到的问题和状态。网络交换主机、收单行主机有可能会按不同的返回码收取不同的交易处理费用,并执行不同的处理过程。

23,Bit41收卡单位终端标识码(CardAcceptorTerminalIdentification)
位图位置:41
格式:定长
类型:ANS8
描述:定义在收单单位中定义一个服务终端的标识码,在同一商户中服务终端标识码应唯一。

24,Bit42收卡商户定义码(CardAcceptorIdentificationCode)
位图位置:42
格式:定长
类型:ANS15
描述:在本地和网络中定义交易单位(商户)的编码。

25,Bit43收卡商户位置(CardAcceptorLocation)
位图位置:43
格式:定长
类型:ANS40
描述:在本地和网络中定义收卡单位(商户)的国家、省。城市等。
选用条件:如对外卡网络,一定要包含此域。

26,Bit44附加返回数据(AdditionalResponseData)
位图位置:44
格式:LLVAR
类型:ANS..25
描述:在金融(授权)交易中授权机构返回的其他信息。

27,Bit48附加数据-私用(AdditionalData-Private)
位图位置:48
格式:LLLVAR
类型:ANS...999
描述:银行电子服务系统使用此域作以下用途
存放批量查询的返回数据
其格式与输出格式表对应

28,Bit49交易货币代码(CurrencyCode,Transaction)
位图位置:49
格式:定长
类型:AN3
描述:按ISO4217定义的交易货币代码,用来表示“交易金额”(field04)所用的货币种类。
交易货币代码是指在收单单位进行交易所用的交易种类。

29,Bit50结算货币代码(CurrencyCode,Settlement)
位图位置:50
格式:定长
类型:AN3
描述:按ISO4217定义的结算货币代码,用来表示结算金额、结算处理费、结算交易费等所用的货币种类。
结算货币代码是指在进行结算和清算过程中所用的货币种类。

30,Bit52用户密码(PIN)数据(PINData)
位图位置:52
格式:定长
类型:B16
描述:用户在服务终端上交易用于识别用户合法性的一些数字。
PIN在分行主机用分行主机密钥按ANSIX9.8标准加密,形成密文块。
选用条件:如果在终端上输入了密码,就需要此域。

31,Bit53密码相关控制信息(SecurityRelatedControl)
位图位置:53
格式:定长
类型:AN16
描述:本域提供有关密码块的附加信息,用于指出用于PIN计算的PINkey,用于MAC计算的MACkey。
本域格式如下表所示:
0-1格式代码2N“20”
2-3PIN加密算法2N“01”:DES
4-5密文块格式2N“01”:ANSI
6PIN密钥索引1N‘1’或‘2’
7MAC密钥索引1N‘1’或‘2’
8-11MAC检查数据4B
12-15填充4N

在BOC信用卡网络中PIN和MAC各使用两个密钥---'1'号和'2'密钥,交易中计算PIN和MAC时只能各用某一个KEY,同时需将所用的KEY索引号填写此域。
选用条件:如果有PIN域或MAC域,一定需有此域。

32,Bit54附加金额(AdditionalAmounts)
位图位置:54
格式:LLLVAR
类型:ANS...120
描述:此域由授权行主机将客户的余额返回给收单终端,以显示或打印在客户回单上。
在此域中最多可有6个余额返回,每个余额返回格式如下:
位置描述
0-1处理码3-4或5-6位定义的帐号类型
2-3金额类型:01-帐户金额
02-可用金额
03-拥有金额
04-应付金额
40-可用取款限额
56-可用转帐限额
4-6金额的货币代码
7‘D’-借记金额,’C’-贷记金额
8-19余额数目

六个余额中必须返回可用余额,在ATM、POS上显示可用余额

33,Bit64信息确认码(MAC)
位图位置:64
格式:定长
类型:B16
描述:数据包的最后一个域,用于验证信息来源的合法性,以及数据包中数据是否未被篡改。
MAC的计算参ANSIX.99,(最后八字节未满八位者左补零,右补零?)
为提高效率,在发送者和接收者之间,只有以下一些重要的域参加MAC的计算。数据包中如果存在以下数据域,它们将参加MAC的计算。

位图域名
2基本帐号
3处理代码
4交易金额
11系统跟踪号
12本地交易时间
13本地交易日期
32收单机构代码
38授权码
39返回码
41收单终端代码
49交易货币代码
95替换金额
选用条件:只使用了1-64域的数据包使用此域。

34,Bit70管理信息码(SystemManagementIndormationCode)
位图位置:70
格式:定长
类型:N3
描述:

用于定义和维护银行电子服务系统内部通讯网络状态和应用工作状态。
网络管理信息代码用于管理清算日期"cutoff",通讯"signon/signoff","keyexchange"等。
支持以下一些网络管理信息码
NMIC网络管理信息码动作
001签到(Signon)
002签退(Signoff)
101交换密钥(Keyexchange)
201结帐日期切换(Cutoff)
202结帐日期切换完成
301测试(Echotest)

35,Bit74贷记交易笔数(TransactionNumber)
位图位置:74
格式:定长
类型:N10
描述:贷记金融交易总的成功交易次数
CYBERBANK软件在收到如下一个处理代码时会增加贷记交易次数。
交易码交易服务
00贷记,购物与服务
01贷记,取现
02贷记,调整(客户调整)

36,Bit75贷记自动冲正交易笔数(Credits,ReversalNumber)
位图位置:75
格式:定长
类型:N10
描述:贷记收单行自动冲正、“ChargeBack"等交易总的交易次数
CYBERBANK软件在收到如下一个处理代码时会增加贷记自动冲正交易笔数
交易码交易服务
20贷记,退货
21贷记,存款
22贷记,调整(客户修改)

37,Bit76借记交易笔数(Debits,Number)
位图位置:76
格式:定长
类型:N10
描述:借记金融交易总的成功交易次数
CYBERBANK软件在收到如下一个处理代码时会增加借记交易次数。
交易码交易服务
00借记,购物与服务
01借记,取现
02借记,调整(客户调整)

38,Bit77借记自动冲正交易笔数(Debits,ReversalNumber)
位图位置:77
格式:定长
类型:N10
描述:借记收单行自动冲正、“ChargeBack"等交易总的交易次数
CYBERBANK软件在收到如下一个处理代码时会增加借记重发交易次数,并在清算表报中反映。
交易码交易服务
20借记(!!!),退货
21借记,存款
22借记,调整(客户修改)

39,Bit78转帐交易笔数(Transfers,Number)
位图位置:78
格式:定长
类型:N10
描述:转帐的交易总次数。
系统在收到如下一个处理代码的金融交易时会增加转帐交易的次数。
交易码交易服务
40客户相关帐户间转帐

40,Bit79转帐自动冲正交易笔数(Transfers,ReversalNumber)
位图位置:79
格式:定长
类型:N10
描述:转帐的自动冲正交易总次数。
系统在收到如下一个处理代码的自动冲正交易时会增加转帐自动冲正交易的次数。
交易码交易服务
40客户相关帐户间转帐

41,Bit80查询交易笔数(Inquiries,Number)
位图位置:80
格式:定长
类型:N10
描述:成功的查询交易次数。
系统软件在收到如下一个处理代码时会增加查询交易次数。
交易码交易服务
30查询可用金额

42,Bit81授权交易笔数(Authorization,Number)
位图位置:81
格式:定长
类型:N10
描述:成功的授权交易总额
在收到一个授权交易时系统将授权交易笔数加一。

43,Bit83贷记交易费金额(Credits,TransactionFeeAmount)
位图位置:83
格式:定长
类型:N12
描述:净交易费用,如交易金额为正。

44,Bit85借记交易费金额(Debits,TransactionFeeAmount)
位图位置:85
格式:定长
类型:N12
描述:净交易费用,如交易金额为负。

45,Bit86贷记交易金额(Credits,Amount)
位图位置:86
格式:定长
类型:N16
描述:贷记金融交易总的交易金额,不含任何费用。
系统在收到如下一个处理代码时会增加贷记交易金额,并在清算表报中反映。
交易码交易服务
20贷记,退货
21贷记,存款
22贷记,调整(客户修改)

46,Bit87贷记自动冲正金额(Credits,ReversalAmount)
位图位置:87
格式:定长
类型:N16
描述:信用卡自动冲正交易的总金额,不含任何费用。

47,Bit88借记交易金额(Debits,Amount)
位图位置:88
格式:定长
类型:N16
描述:借记金融交易总的交易金额,不含任何费用。
系统在收到如下一个处理代码时会增加借记交易金额,并在清算表报中反映。
交易码交易服务
00借记,购物与服务
01借记,取现
02借记,调整(客户调整)

48,Bit89借记自动冲正交易金额(Debits,ReversalAmount)
位图位置:89
格式:定长
类型:N16
描述:借记自动冲正交易的总金额,不含任何费用。

49,Bit90原交易的数据元素(OriginalDataElements)
位图位置:90
格式:定长
类型:N42
描述:存放原交易的一些数据,用于修改或自动冲正。
数据由以下五部分组成:
位置描述
1-4信息类型码
设为原交易的信息类型代码
5-10系统跟踪号
原交易系统跟踪号
11-20交易日期和时间
原交易的交易日期和时间
21-31原收单机构
原交易的收单机构
不足11位的机构代码,左补‘0’
32-42原向前机构
原交易的收单机构
不足11位的机构代码,左补‘0’

50,Bit91文件修改编码(FileUpdateCode)
位图位置:91
格式:定长
类型:AN1
描述:用此域指示某文件怎样维护。
CYBERBANK支持以下一些修改代码:
1增加记录
2改变记录
3删除记录
5查询
7增加文件

选用条件:

51,Bit94服务指示码(ServiceIndicator)
位图位置:94
格式:定长
类型:AN7
描述:指示文件修改服务。

选用条件:

52,Bit95代替金额(ReplacementAmounts)
位图位置:95
格式:定长
类型:N42!!!
描述:客户修改或部分取消已完成的交易,最后实际发生的交易金额,
交易的原交易金额存放在90域。
本域由以下4部分组成
Sub-ElementAmountAttribute
交易实际金额N12
结算实际金额N12
实际交易费用X+N8
实际结算费用X+N8

53,Bit97净结算金额(NetSettlementAmount)
位图位置:97
格式:定长
类型:X+N16
描述:此域为净结帐金额。
502交易中用于发送当天的净结算金额
例:“C0000000020000000”,表示贷方('+'?)200000.00元。
“D0000000020000000”,表示借方('-'?)200000.00元。

54,Bit99结算机构码(SettlementInstitutionIdentification)
位图位置:99
格式:LLVAR
类型:N..11
描述:此域存放接收清算信息的机构代码。
返回数据包此域必须和请求数据包一致。

55,Bit100接收机构码(ReceivingInstitutionIdentification)
位图位置:100
格式:LLVAR
类型:N..11
描述:金融交易此域存放授权机构代码。
网管类交易,800/820交易,此域存放请求的目的机构代码。
返回数据包此域必须和请求数据包一致。

56,Bit101文件名(FileName)
位图位置:101
格式:LLVAR
类型:ANS..17
描述:发送机构设置的文件名。

57,Bit102帐号1(AccountIdentification1)
位图位置:102
格式:LLVAR
类型:ANS..28
描述:一个特定的客户帐号。帐号1用来描述受借记、转出、支付等交易影响的帐户。
选用条件:转帐时使用。

58,Bit103帐号2(AccountIdentiication2)
位图位置:103
格式:LLVAR
类型:ANS..28
描述:交易的补充信息,如:第二货币号、利率代码、起止日期等。
定义如下表
0000000000000000000000000000000000000000000000000
位置长度描述
00-2122帐户
22-276发卡机构号

如果此域存在,将按此机构代码作为路由信息。
选用条件:机构间转帐时使用。

60,Bit123新密码数据(NewPINData)
位图位置:123
格式:LLLVAR
类型:B...16
描述:修改密码交易时存放新密码。
格式参考52域
选用条件:修改密码交易时必须有此域。

61,Bit128信息确认码(MAC)
位图位置:128
格式:定长
类型:B16
描述:数据包的最后一个域,用于验证信息来源的合法性,以及数据包中数据是否未被篡改。
MAC的计算参ANSIX.99
为提高效率,在发送者和接收者之间,只有以下一些重要的域参加MAC的计算。数据包中如果存在以下数据域,它们将参加MAC的计算。

位图域名
2基本帐号
3处理代码
4交易金额
11系统跟踪号
12本地交易时间
13本地交易日期
32收单机构代码
38授权码
39返回码
41收单终端代码
49交易货币代码
95替换金额

选用条件:使用65-128数据域的数据包需使用此域。

typedefstruct
{
longsync_counter;
charkeytype;
}AB8583_Security_Ctrl_Info;
typedefstruct
{
charlength[4];
struct
{
characcount_type[3];
charamount_type[3];
charcurrency_code[4];
doubleamount;
}ledger_balance_amount;
struct
{
characcount_type[3];
charamount_type[3];
charcurrency_code[4];
doubleamount;
}available_balance_amount;
}AB8583_Balance_Amount;
typedefstruct
{
charencryption_key_used;
charmac_key_used;
charmessage_effect;
charno_of_unlogged_txns;
}AB8583_Message_Indicator;
typedefstruct
{
charauth_function_code;
charauth_mode;
charauth_id_response_code[7];
charservice_business_code[5];
charinvoice_number[11];
}AB8583_Auth_Operation_Code;
typedefstruct
{
charorg_message_type[5];
charorg_system_trace_number[7];
charorg_transaction_date_time[11];
charorg_acqr_inst_id_code[12];
charora_forw_inst_id_code[12];
}AB8583_Original_Data_Elements;
typedefstruct
{
doubleactual_amount_of_transaction;
doubleactual_amount_of_settlement;
doubleactual_amount_of_transaction_fee;
doubleactual_amount_of_settlement_fee;
}AB8583_Replacement_Amounts;
BITDATA_NAMETYPE
typedefstruct
{
charmessage_type[5];
/***
MESSAGE_TYPE_IDENTIFICATIONN4
0100授权类请求消息(授权,撤消授权,余额查询)
0110授权类应答消息(授权,撤消授权,余额查询)
0200金融类请求消息(取款,存款,消费,退款)
0210金融类应答消息(取款,存款,消费,退款)
0420冲正类报告消息(取款,存款,消费,退款,授权)
0430冲正类应答消息(取款,存款,消费,退款,授权)
0524对帐类报告消息(ATM结算对帐,POS结算对帐)
0534对帐类应答消息(ATM结算对帐,POS结算对帐)
0800网络业务管理类请求消息(重置密钥)
0810网络业务管理类应答消息(重置密钥)
0820网络业务管理类报告消息(状态设置,广播通知,申请重置密钥)
0830网络业务管理类应答消息(状态设置,广播通知,申请重置密钥)
****/
charprimary_account_number[20];
/****
2PRIMARY_ACCOUNT_NUMBERN...19(LLVAR)
charprocessing_code[7];
3PROCESSING_CODEN6
doubleamount_of_transactions;
4AMOUNT_OF_TRANSACTIONSN12
doubleamount_of_settlement;
5AMOUNT_OF_SETTLEMENTN12
chartransmission_date_and_time[11];
7TRANSMISSION_DATE_AND_TIMEN10
longsystem_trace_audit_number;
11SYSTEM_TRACE_AUDIT_NUMBERN6
chartime_of_local_transaction[7];
12TIME_OF_LOCAL_TRANSACTIONN6
chardate_of_local_transaction[5];
13DATE_OF_LOCAL_TRANSACTIONN4
chardate_of_settlement[5];
15DATE_OF_SETTLEMENTN4
chardate_of_capture[5];
17DATE_OF_CAPTUREN4
charbusiness_type[4];
18BUSINESS_TYPEAN3
charpoint_of_service_entry_mode[4];
22POINT_OF_SERVICE_ENTRY_MODEN3
charpoint_of_service_PIN_capture_code[3];
26POINT_OF_SERVICE_PIN_CAPTURE_CODEN2
doublefee_of_transaction;
28FEE_OF_TRANSACTIONN8
doublefee_of_settlement;
29FEE_OF_SETTLEMENTX+N8
characquiring_institution_id_code[12];
32ACQUIRING_INSTITUTION_IDENTIFICATION_CODEN..11(LLVAR)
charforwarding_institution_id_code[12];
33FORWARDING_INSTITUTION_IDENTIFICATION_CODEN..11(LLVAR)
chartrack_2_data[38];
35TRACK_2_DATAZ...37(LLVAR)
chartrack_3_data[105];
36TRACK_3_DATAZ...104(LLLVAR)
longretrieval_reference_number;
37RETRIEVAL_REFERENCE_NUMBERAN12
charauth_id_response[7];
38AUTHORIZATION_IDENTIFICATION_RESPONSEAN6
charresponse_code[3];
39RESPONSE_CODEAN2
charcard_acceptor_terminal_id[9];
41CARD_ACCEPTOR_TERMINAL_IDENTIFICATIONANS8
前两位的定义如下:
51ATM终端
52银行POS
53商户POS
charcard_acceptor_id_code[16];
42CARD_ACCEPTOR_IDENTIFICATION_CODEANS15
charcard_acceptor_name_location[41];
43CARD_ACCEPTOR_NAME_LOCATIONANS40
charadditional_response_data[26];
44ADDITIONAL_RESPONSE_DATAANS..25(LLVAR)
charbroadcasted_message[1000];
48BROADCASTED_MESSAGEANS...999
charcurrency_code_of_transaction[4];
49CURRENCY_CODE_OF_TRANSACTIONAN3
charcurrency_code_of_settlement[4];
50CURRENCY_CODE_OF_SETTLEMENTAN3
charPIN[8];
52PIN_DATAB64
AB8583_Security_Ctrl_Infosecurity_ctrl_info;
53SECURITY_RELATED_CONTROL_INformATIONN16
SYNC_COUNTERN8
密钥同步计数器
RESERVEDN7
KEY_TYPEN1
1用于交换中心和成员行机构之间的PIN加密解密
2用于交换中心和成员行机构之间的MAC计算
3用于成员行和终端之间的PIN加密解密
AB8583_Balance_Amountbalance_amount;
54BALANCE_AMOUNTAN43
LENGTHN3(040)
LEDGER_BALANCE_AMOUNT
ACCOUNT_TYPEN2(CC=30,SC=10)
AMOUNT_TYPEN2(01)
CURRENCY_CODEAN3(156)
AMOUNTX+N12
AVAILABLE_BALANCE_AMOUNT
ACCOUNT_TYPEN2(CC=30,SC=10)
AMOUNT_TYPEN2(01)
CURRENCY_CODEAN3(156)
AMOUNTX+N12
charsecond_account_number[20];
55SECOND_ACCOUNT_NUMBERN...19(LLVAR)
AB8583_Message_Indicatormessage_indicator;
60MESSAGE_INDICATORN...005(LLLVAR)
ENCRYPTION_KEY_USEDN1
PIN加密/解密所使用的密钥标识,定义如下:
0不加密
1旧密钥
2新密钥
MAC_KEY_USEDN1
0不加密
1旧密钥
2新密钥
MESSAGE_EFFECTN1
0消息用于生产环境
1消息用于测试环境
2ATM取款交易对帐标志
3保留
4银行POS取款交易对帐标志
5银行POS存款交易对帐标志
6商用POS消费交易对帐标志
7商用POS退款交易对帐标志
NO_OF_UNLOGGED_TXNSN2
AB8583_Auth_Operation_Codeauth_operation_code;
61AUTHORIZATION_OPERATION_CODEN...022(LLLVAR)
AUTHORIZATION_FUNCTION_CODEN1
0授权
1撤消授权
2消费
3退款
4取款
5查询
AUTHORIZATION_MODEN1
0不需授权
1需授权
AUTH_ID_RESPONSE_CODEN6
SERVICE_BUSINESS_CODEN4
INVOICE_NUMBERN10
charauthorizing_agent_institution_id_code[12];
62AUTHORIZING_AGENT_INSTITUTION_IDENTIFICATION_CODEN...011(LLLVAR)
chardestination_institution_id_code[12];
63DESTINATION_INSTITUTION_IDENTIFICATION_CODEN...011(LLLVAR)
64
charsettlement_code;
66SETTLEMENT_CODEN1
charnetwork_management_information_code[4];
70NETWORK_MANAGEMENT_INformATION_CODEN3
chardate_of_action[7];
73DATE_OF_ACTIONN6
longnumber_of_credits;
74NUMBER_OF_CREDITSN10
longreversal_number_of_credits;
75REVERSAL_NUMBER_OF_CREDITSN10
longnumber_of_debits;
76NUMBER_OF_DEBITSN10
longrevsersal_number_of_debits;
77REVERSAL_NUMBER_OF_DEBITSN10
longnumber_of_transfer;
78NUMBER_OF_TRANSFERN10
longreversal_number_of_transfer;
79REVERSAL_NUMBER_OF_TRANSFERN10
longnumber_of_inquiries;
80NUMBER_OF_INQUIRIESN10
doubleprocessing_fee_amount_of_credits;
82PROCESSING_FEE_AMOUNT_OF_CREDITSN12
doubleprocessing_fee_amount_of_debits;
84PROCESSING_FEE_AMOUNT_OF_DEBITSN12
doubleamount_of_credits;
86AMOUNT_OF_CREDITSN16
doublereversal_amount_of_credits;
87REVERSAL_AMOUNT_OF_CREDITSN16
doubleamount_of_debits;
88AMOUNT_OF_DEBITSN16
doublereversal_amount_of_debits;
89REVERSAL_AMOUNT_OF_DEBITSN16
AB8583_Original_Data_Elementsoriginal_data_elements;
90ORIGINAL_DATA_ELEMENTSN42
冲正交易所用的原始数据记录,内容如下:
ORIGINAL_DATA_ELEMENTS
ORG_MESSAGE_TYPEN4
ORG_SYSTEM_TRACE_NUMBERN6
ORG_TRANSACTION_DATA_TIMEN10
ORG_ACQR_INST_ID_CODEN11
ORG_FORW_INST_ID_CODEN11
AB8583_Replacement_Amountsreplacement_amounts;
95REPLACEMENT_AMOUNTSAN42
charmessage_securty_code[8];
96MESSAGE_SECURTY_CODEB64
doubleamount_of_net_settlement;
97AMOUNT_OF_NET_SETTLEMENTX+N16
charsettlement_institution_id_code[12];
99SETTLEMENT_INSTITUTION_IDENTIFICATION_CODEN...11(LLVAR)
charreceiveing_institution_id_code[12];
100RECEIVEING_INSTITUTION_IDENTIFICATION_CODEN...11(LLVAR)
charsender_institution_id_code[12];
120SENDER_INSTITUTION_IDENTIFICATION_CODEN...11(LLVAR)
longsender_reference_number;
121SENDER_REFERENCE_NUMBERAN12
charMAC[8];
128MESSAGE_AUTHENTICATION_CODEB64

摘选自:

http://blog.163.com/chenwq1985@126/blog/static/38024914200781711046704/

http://www.chinaunix.net/jh/7/151740.html

ISO8583包[详细说明]相关推荐

  1. ISO8583包详细资料

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

  2. 【ROM制作工具】如何三分钟学会制作手机线刷包?一键制作线刷包详细教程

    如何在最短的时间内制作一款手机线刷包让卡顿的手机线刷回官方?线刷回官方的手机刷机包在制作时有什么样的技巧?接下来将和大家分享一下如何在三分钟制作一款手机线刷包! 一键制作线刷包详细教程 准备工作: 首 ...

  3. ISO8583包简介和源代码

     http://blog.csdn.net/xpzhang/article/details/695059 本文主要包括ISO8583包简介和源代码,下面是简介: 简介 ISO8583包(简称858 ...

  4. 【Wireshark系列十】wireshark怎么抓包、wireshark抓包详细图文教程

    wireshark怎么抓包.wireshark抓包详细图文教程 wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必 ...

  5. java utl_java utl包详细讲解.doc

    java utl包详细讲解 java.util包 2006-05-30 10:06:02 来源: JR 网友评论0?条 论坛 ?? 本章介绍Java的实用工具类库java.util包.在这个包中,Ja ...

  6. 使用Fiddler对手机APP抓包详细教程

    使用Fiddler对手机APP抓包详细教程 在实现用Fiddler对手机APP抓包过程中遇到了两个很棘手的问题,一个是设置代理后手机就上不了网,在手机上下载证书一直提示下载失败,第二个就是在fiddl ...

  7. 我的世界java版去哪下载光影,《我的世界》中国版光影包详细安装教程 光影怎么安装?...

    <我的世界>中国版光影包详细安装教程 光影怎么安装? 2017-08-15 15:17:21来源:网易论坛编辑:评论(0) <我的世界>中国版已经正式开测,玩家在体验游戏时都喜 ...

  8. 安卓小白如何制作一个精简ROOT的卡刷ROM?小白制作ROM包详细图文教程

    安卓小白如何使用最短的时间制作一个精简ROOT的卡刷ROM? 小白用户如何便捷的制作一款属于自己的刷机包? 小白制作刷机包时具体需要什么样的操作步骤? 接下来和大家分享一下小白制作ROM包详细图文教程 ...

  9. linux rpm命令 查询包安装与否、包详细信息、包安装位置、文件属于哪个包、包依赖

    查询这个包是否已安装 rpm -q 包名 rpm -qa -q 查询 -a all 查询已安装软件包和未安装软件包详细信息 rpm -qi 包名 rpm -qip 包全名 -i 查询软件信息 -p p ...

最新文章

  1. Dynamo分布式系统——「RWN」协议解决多备份数据如何读写来保证数据一致性,而「向量时钟」来保证当读取到多个备份数据的时候,如何判断哪些数据是最新的这种情况...
  2. 简述用 MAT 分析 Android 应用OOM
  3. c++ map是有序还是无序的_c++中map与unordered_map的区别
  4. 嵩天-Python语言程序设计程序题--第二周:基本图形绘制
  5. 单径Rayleigh信道下基带模型的多用户BPSK直接序列扩频系统MATLAB仿真(m序列、Gold序列和正交Gold序列)
  6. 计算机专业实践试题,计算机专业实践综合试题答案..doc
  7. B9.流行的框架与新技术
  8. lede 插件_【PS插件】神器在手不怕图片模糊
  9. CentOS系统缺少库文件解决办法
  10. 福州大学软件工程1916|W班 第10、11次作业成绩排名
  11. 磁共振线圈分类_磁共振线圈的发展历程
  12. Linux perlbrew Perl5 安装教程
  13. 电商物流仓储流程图模板分享
  14. ubuntu下使用Passenger配置redmine
  15. 香港 “一卡通”業務收費表
  16. 百度没有文化(转载)
  17. 电脑重装系统一启动就黑屏了该怎么办
  18. c++头文件:stdio.h ,cstdio ,iostream ,bits/stdc++.h
  19. LC6936-TWS耳机方案
  20. STM32的IIC(模拟)读写AT24c02

热门文章

  1. 如何将.m4a转.wav文件
  2. win10系统无法切换输入法无法输出中文
  3. 学渣的刷题之旅 leetcode刷题 69.x的平方根(暴力法、二分查找)
  4. 第26次Scrum会议(11/14)【欢迎来怼】
  5. 双向广搜(DBFS)
  6. python 二维强度图_Python简单做二维统计图
  7. LabVIEW基础课程(2) ----虚拟抽奖机
  8. vue开发抽取组件方式思路
  9. 深度学习目标检测方法汇总
  10. 在eclipse上使用Maven创建简单项目