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,"RIMARY ACCOUNT NUMBER ", 22, 0, 2, 0, NULL,0}, 
/* FLD 3 */ {0,"ROCESSING 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,"OINT 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,"OINT 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,"ERSONAL 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 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 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位。 
附A:ISO8583各域段的说明 
1,信息类型(message type)定义 
位图位置:- 
格式:定长 
类型:N4 
描述: 
数据包的第一部分,定义数据包的类型。 
数据类型由数据包的发起者设定,应遵循以下要求: 
数据包开始部分必须是信息类型; 
对不支持的信息类型能给出拒绝应答。 
0100授权交易 
0110授权交易答复 
0200金融交易 
0210金融交易答复 
0240查询交易 
0250查询交易答复 
0400冲正交易 
0410冲正交易答复 
0800管理交易 
0810管理交易答复 

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

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

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


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



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

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

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

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

9,Bit13本地交易日期(Date ,Local Transaction) 
位图位置: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's Type) 
位图位置: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-Service Entry Mode) 
位图位置: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-Service Condition Code) 
位图位置:25 
格式:定长 
类型:N2 
描述:定义交易发生的服务点类型 
用法说明:下面是CYBERBANK支持的服务点条件代码。 
服务点条件代码服务点终端类型 
2自动柜员机(ATM) 
10银行终端(10) 
14POS 
20电话银行 

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


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

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

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

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

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

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


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

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

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

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

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

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

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

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

31,Bit53密码相关控制信息(Security Related Control) 
位图位置:53 
格式:定长 
类型:AN16 
描述:本域提供有关密码块的附加信息,用于指出用于PIN计算的PIN key,用于MAC计算的MAC key。 
本域格式如下表所示: 
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附加金额(Additional Amounts) 
位图位置: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管理信息码(System Management Indormation Code) 
位图位置:70 
格式:定长 
类型:N3 
描述: 

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

选用条件: 

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

选用条件: 

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

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


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

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

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

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

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

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


60,Bit123新密码数据(New PIN Data) 
位图位置: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; 
typedef struct 

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; 
typedef struct 

charencryption_key_used; 
charmac_key_used; 
charmessage_effect; 
charno_of_unlogged_txns; 
} AB8583_Message_Indicator; 
typedef struct 

charauth_function_code; 
charauth_mode; 
charauth_id_response_code[7]; 
charservice_business_code[5]; 
charinvoice_number[11]; 
} AB8583_Auth_Operation_Code; 
typedef struct 

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; 
typedef struct 

doubleactual_amount_of_transaction; 
doubleactual_amount_of_settlement; 
doubleactual_amount_of_transaction_fee; 
doubleactual_amount_of_settlement_fee; 
} AB8583_Replacement_Amounts; 
BIT DATA_NAME TYPE 
typedef struct 

charmessage_type[5]; 
/*** 
MESSAGE_TYPE_IDENTIFICATION N4 
0100 授权类请求消息(授权,撤消授权,余额查询) 
0110 授权类应答消息(授权,撤消授权,余额查询) 
0200 金融类请求消息(取款,存款,消费,退款) 
0210 金融类应答消息(取款,存款,消费,退款) 
0420 冲正类报告消息(取款,存款,消费,退款,授权) 
0430 冲正类应答消息(取款,存款,消费,退款,授权) 
0524 对帐类报告消息(ATM结算对帐,POS结算对帐) 
0534 对帐类应答消息(ATM结算对帐,POS结算对帐) 
0800 网络业务管理类请求消息(重置密钥) 
0810 网络业务管理类应答消息(重置密钥) 
0820 网络业务管理类报告消息(状态设置,广播通知,申请重置密钥) 
0830 网络业务管理类应答消息(状态设置,广播通知,申请重置密钥) 
****/ 
charprimary_account_number[20]; 
/**** 
2 PRIMARY_ACCOUNT_NUMBER N...19(LLVAR) 
charprocessing_code[7]; 
3 PROCESSING_CODE N6 
doubleamount_of_transactions; 
4 AMOUNT_OF_TRANSACTIONS N12 
doubleamount_of_settlement; 
5 AMOUNT_OF_SETTLEMENT N12 
chartransmission_date_and_time[11]; 
7 TRANSMISSION_DATE_AND_TIME N10 
longsystem_trace_audit_number; 
11 SYSTEM_TRACE_AUDIT_NUMBER N6 
chartime_of_local_transaction[7]; 
12 TIME_OF_LOCAL_TRANSACTION N6 
chardate_of_local_transaction[5]; 
13 DATE_OF_LOCAL_TRANSACTION N4 
chardate_of_settlement[5]; 
15 DATE_OF_SETTLEMENT N4 
chardate_of_capture[5]; 
17 DATE_OF_CAPTURE N4 
charbusiness_type[4]; 
18 BUSINESS_TYPE AN3 
charpoint_of_service_entry_mode[4]; 
22 POINT_OF_SERVICE_ENTRY_MODE N3 
charpoint_of_service_PIN_capture_code[3]; 
26 POINT_OF_SERVICE_PIN_CAPTURE_CODE N2 
doublefee_of_transaction; 
28 FEE_OF_TRANSACTION N8 
doublefee_of_settlement; 
29 FEE_OF_SETTLEMENT X+N8 
characquiring_institution_id_code[12]; 
32 ACQUIRING_INSTITUTION_IDENTIFICATION_CODE N..11(LLVAR) 
charforwarding_institution_id_code[12]; 
33 FORWARDING_INSTITUTION_IDENTIFICATION_CODE N..11(LLVAR) 
chartrack_2_data[38]; 
35 TRACK_2_DATA Z...37(LLVAR) 
chartrack_3_data[105]; 
36 TRACK_3_DATA Z...104(LLLVAR) 
longretrieval_reference_number; 
37 RETRIEVAL_REFERENCE_NUMBER AN12 
charauth_id_response[7]; 
38 AUTHORIZATION_IDENTIFICATION_RESPONSE AN6 
charresponse_code[3]; 
39 RESPONSE_CODE AN2 
charcard_acceptor_terminal_id[9]; 
41 CARD_ACCEPTOR_TERMINAL_IDENTIFICATION ANS8 
前两位的定义如下: 
51 ATM终端 
52 银行POS 
53 商户POS 
charcard_acceptor_id_code[16]; 
42 CARD_ACCEPTOR_IDENTIFICATION_CODE ANS15 
charcard_acceptor_name_location[41]; 
43 CARD_ACCEPTOR_NAME_LOCATION ANS40 
charadditional_response_data[26]; 
44 ADDITIONAL_RESPONSE_DATA ANS..25(LLVAR) 
charbroadcasted_message[1000]; 
48 BROADCASTED_MESSAGE ANS...999 
charcurrency_code_of_transaction[4]; 
49 CURRENCY_CODE_OF_TRANSACTION AN3 
charcurrency_code_of_settlement[4]; 
50 CURRENCY_CODE_OF_SETTLEMENT AN3 
charPIN[8]; 
52 PIN_DATA B64 
AB8583_Security_Ctrl_Infosecurity_ctrl_info; 
53 SECURITY_RELATED_CONTROL_INformATION N16 
SYNC_COUNTER N8 
密钥同步计数器 
RESERVED N7 
KEY_TYPE N1 
1 用于交换中心和成员行机构之间的PIN加密解密 
2 用于交换中心和成员行机构之间的MAC计算 
3 用于成员行和终端之间的PIN加密解密 
AB8583_Balance_Amountbalance_amount; 
54 BALANCE_AMOUNT AN43 
LENGTH N3(040) 
LEDGER_BALANCE_AMOUNT 
ACCOUNT_TYPE N2(CC=30,SC=10) 
AMOUNT_TYPE N2(01) 
CURRENCY_CODE AN3(156) 
AMOUNT X+N12 
AVAILABLE_BALANCE_AMOUNT 
ACCOUNT_TYPE N2(CC=30,SC=10) 
AMOUNT_TYPE N2(01) 
CURRENCY_CODE AN3(156) 
AMOUNT X+N12 
charsecond_account_number[20]; 
55 SECOND_ACCOUNT_NUMBER N...19(LLVAR) 
AB8583_Message_Indicatormessage_indicator; 
60 MESSAGE_INDICATOR N...005(LLLVAR) 
ENCRYPTION_KEY_USED N1 
PIN加密/解密所使用的密钥标识,定义如下: 
0 不加密 
1 旧密钥 
2 新密钥 
MAC_KEY_USED N1 
0 不加密 
1 旧密钥 
2 新密钥 
MESSAGE_EFFECT N1 
0 消息用于生产环境 
1 消息用于测试环境 
2 ATM取款交易对帐标志 
3 保留 
4 银行POS取款交易对帐标志 
5 银行POS存款交易对帐标志 
6 商用POS消费交易对帐标志 
7 商用POS退款交易对帐标志 
NO_OF_UNLOGGED_TXNS N2 
AB8583_Auth_Operation_Codeauth_operation_code; 
61 AUTHORIZATION_OPERATION_CODE N...022(LLLVAR) 
AUTHORIZATION_FUNCTION_CODE N1 
0 授权 
1 撤消授权 
2 消费 
3 退款 
4 取款 
5 查询 
AUTHORIZATION_MODE N1 
0 不需授权 
1 需授权 
AUTH_ID_RESPONSE_CODE N6 
SERVICE_BUSINESS_CODE N4 
INVOICE_NUMBER N10 
charauthorizing_agent_institution_id_code[12]; 
62 AUTHORIZING_AGENT_INSTITUTION_IDENTIFICATION_CODE N...011(LLLVAR) 
chardestination_institution_id_code[12]; 
63 DESTINATION_INSTITUTION_IDENTIFICATION_CODE N...011(LLLVAR) 
64 
charsettlement_code; 
66 SETTLEMENT_CODE N1 
charnetwork_management_information_code[4]; 
70 NETWORK_MANAGEMENT_INformATION_CODE N3 
chardate_of_action[7]; 
73 DATE_OF_ACTION N6 
longnumber_of_credits; 
74 NUMBER_OF_CREDITS N10 
longreversal_number_of_credits; 
75 REVERSAL_NUMBER_OF_CREDITS N10 
longnumber_of_debits; 
76 NUMBER_OF_DEBITS N10 
longrevsersal_number_of_debits; 
77 REVERSAL_NUMBER_OF_DEBITS N10 
longnumber_of_transfer; 
78 NUMBER_OF_TRANSFER N10 
longreversal_number_of_transfer; 
79 REVERSAL_NUMBER_OF_TRANSFER N10 
longnumber_of_inquiries; 
80 NUMBER_OF_INQUIRIES N10 
doubleprocessing_fee_amount_of_credits; 
82 PROCESSING_FEE_AMOUNT_OF_CREDITS N12 
doubleprocessing_fee_amount_of_debits; 
84 PROCESSING_FEE_AMOUNT_OF_DEBITS N12 
doubleamount_of_credits; 
86 AMOUNT_OF_CREDITS N16 
doublereversal_amount_of_credits; 
87 REVERSAL_AMOUNT_OF_CREDITS N16 
doubleamount_of_debits; 
88 AMOUNT_OF_DEBITS N16 
doublereversal_amount_of_debits; 
89 REVERSAL_AMOUNT_OF_DEBITS N16 
AB8583_Original_Data_Elementsoriginal_data_elements; 
90 ORIGINAL_DATA_ELEMENTS N42 
冲正交易所用的原始数据记录,内容如下: 
ORIGINAL_DATA_ELEMENTS 
ORG_MESSAGE_TYPE N4 
ORG_SYSTEM_TRACE_NUMBER N6 
ORG_TRANSACTION_DATA_TIME N10 
ORG_ACQR_INST_ID_CODE N11 
ORG_FORW_INST_ID_CODE N11 
AB8583_Replacement_Amountsreplacement_amounts; 
95 REPLACEMENT_AMOUNTS AN42 
charmessage_securty_code[8]; 
96 MESSAGE_SECURTY_CODE B64 
doubleamount_of_net_settlement; 
97 AMOUNT_OF_NET_SETTLEMENT X+N16 
charsettlement_institution_id_code[12]; 
99 SETTLEMENT_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) 
charreceiveing_institution_id_code[12]; 
100 RECEIVEING_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) 
charsender_institution_id_code[12]; 
120 SENDER_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) 
longsender_reference_number; 
121 SENDER_REFERENCE_NUMBER AN12 
charMAC[8]; 
128 MESSAGE_AUTHENTICATION_CODE B64




程序:

#include <stdio.h>; 
#include <string.h>; 
#include <stddef.h>; 
#include "AB8583.h" 
#define SIZEOF(type,value)((int)(sizeof(((type *)0)->;value))) 
#define CHG(value)AB_BIT_##value,offsetof(AB8583,value),SIZEOF(AB8583,value) 

#define CHG_HTON1 
#define CHG_NTOH2 
#define CHG_HTOS3 
#define CHG_STOH4 
#defineCHAR_CREDIT'C' 
#defineCHAR_DEBIT'D' 

typedef struct 

intbitName; 
intoffset; 
intvalsize; 
intsize; 
int(*chgF)(int chg,void *value,int size, 
char *buf,int bufLen,int *bufUse); 
} AB8583Chg; 

static int chg_char_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_str_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_str_llvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_str_lllvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_bit_bit(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_long_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_long_lllvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_double_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_double_xn(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_SecurityCtrlInfo_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_BalanceAmount_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_MessageIndicator_lllvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_AuthOperationCode_lllvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_OriginalDataElements_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 
static int chg_ReplacementAmounts_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse); 

static AB8583ChgchgList[] 
={ 

{ CHG(extend_bitmap),64, chg_bit_bit }, 
{ CHG(primary_account_number),19, chg_str_llvar }, 
{ CHG(processing_code),6,  chg_str_n }, 
{ CHG(amount_of_transactions),12, chg_double_n }, 
{ CHG(amount_of_settlement),10, chg_double_n }, 
{ CHG(transmission_date_and_time),10, chg_long_n }, 
{ CHG(system_trace_audit_number),6,  chg_long_n }, 
{ CHG(time_of_local_transaction),6,  chg_str_n }, 
{ CHG(date_of_local_transaction),4,  chg_str_n }, 
{ CHG(date_of_settlement),4,  chg_str_n }, 
{ CHG(date_of_capture),4,  chg_str_n }, 
{ CHG(business_type),3,  chg_str_n }, 
{ CHG(point_of_service_entry_mode),3,  chg_str_n }, 
{ CHG(point_of_service_PIN_capture_code),2,  chg_str_n }, 
{ CHG(fee_of_transaction),8,  chg_double_n }, 
{ CHG(fee_of_kick_back),8,  chg_double_xn }, 
{ CHG(acquiring_institution_id_code),11, chg_str_llvar }, 
{ CHG(forwarding_institution_id_code),11, chg_str_llvar }, 
{ CHG(track_2_data),37, chg_str_llvar }, 
{ CHG(track_3_data),104,chg_str_lllvar }, 
{ CHG(retrieval_reference_number),12, chg_str_n }, 
{ CHG(auth_id_response),6,  chg_str_n }, 
{ CHG(response_code),2,  chg_str_n }, 
{ CHG(card_acceptor_terminal_id),8,  chg_str_n }, 
{ CHG(card_acceptor_id_code),15, chg_str_n }, 
{ CHG(card_acceptor_name_location),40, chg_str_n }, 
{ CHG(additional_response_data),25, chg_str_llvar }, 
{ CHG(broadcast_message),999,chg_str_lllvar }, 
{ CHG(currency_code_of_transaction),3,  chg_str_n }, 
{ CHG(currency_code_of_settlement),3,  chg_str_n }, 
{ CHG(PIN),64, chg_bit_bit }, 
{ CHG(security_ctrl_info),16, chg_SecurityCtrlInfo_n }, 
{ CHG(balance_amount),43, chg_BalanceAmount_n }, 
{ CHG(second_account_number),19, chg_str_n }, 
{ CHG(message_indicator),5, chg_MessageIndicator_lllvar}, 
{ CHG(auth_operation_code),       22,chg_AuthOperationCode_lllvar}, 
{ CHG(auth_agent_institution_id_code),11, chg_str_lllvar }, 
{ CHG(destination_institution_id_code),11, chg_str_lllvar }, 
{ CHG(MAC64),64, chg_bit_bit}, 
{ CHG(settlement_code),1,  chg_char_n }, 
{ CHG(network_management_information_code),3,  chg_str_n }, 
{ CHG(date_of_action),6,  chg_str_n }, 
{ CHG(number_of_credits),10, chg_long_n }, 
{ CHG(reversal_number_of_credits),10, chg_long_n }, 
{ CHG(number_of_debits),10, chg_long_n }, 
{ CHG(reversal_number_of_debits),10, chg_long_n }, 
{ CHG(number_of_transfer),10, chg_long_n }, 
{ CHG(reversal_number_of_transfer),10, chg_long_n }, 
{ CHG(number_of_inquiries),10, chg_long_n }, 
{ CHG(number_of_authorizations),10, chg_long_n }, 
{ CHG(processing_fee_amount_of_credits),12, chg_double_n }, 
{ CHG(processing_fee_amount_of_debits),12, chg_double_n }, 
{ CHG(amount_of_credits),16, chg_double_n }, 
{ CHG(reversal_amount_of_credits),16, chg_double_n }, 
{ CHG(amount_of_debits),16, chg_double_n }, 
{ CHG(reversal_amount_of_debits),16, chg_double_n }, 
{ CHG(original_data_elements),42, chg_OriginalDataElements_n}, 
{ CHG(replacement_amounts),42, chg_ReplacementAmounts_n }, 
{ CHG(message_security_code),64, chg_bit_bit }, 
{ CHG(amount_of_net_settlement),16, chg_double_xn }, 
{ CHG(settlement_institution_id_code),11, chg_str_llvar }, 
{ CHG(receiveing_institution_id_code),11, chg_str_llvar }, 
{ CHG(trans_rem),100,chg_str_lllvar }, 
{ CHG(sender_institution_id_code),11, chg_str_lllvar }, 
{ CHG(sender_reference_number),12, chg_long_lllvar }, 
{ CHG(pid_no),15, chg_str_lllvar }, 
{ CHG(operator),16,  chg_str_lllvar }, 
{ CHG(checker),16,  chg_str_lllvar }, 
{ CHG(add_auth_id_response),13,  chg_str_lllvar }, 
{ CHG(MAC),64, chg_bit_bit}, 

{ 0,0,0,0,NULL} 

}; 

static int chg_move(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

if (*bufUse+size>;bufLen) 
return(-1); 
switch(chg) 

case CHG_HTOS: 
memcpy(buf+*bufUse,value,size);break; 
case CHG_STOH: 
memcpy(value,buf+*bufUse,size);break; 
default: 
return(-1); 
}; 
*bufUse=*bufUse+size; 
return(0); 

static int chg_str_move(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

intlen; 

switch(chg) 

case CHG_HTOS: 
len=strlen((char *)value); 
if ((len>;size)||(*bufUse+len>;bufLen)) 
return(-1); 
strcpy(buf+*bufUse,(char *)value); 
*bufUse=*bufUse+len+1; 
break; 
case CHG_STOH: 
len=strlen(buf+*bufUse); 
if ((len>;size)||(*bufUse+len>;bufLen)) 
return(-1); 
strcpy((char *)value,buf+*bufUse); 
*bufUse=*bufUse+len+1; 
break; 
default: 
return(-1); 
}; 
return(0); 


static int chg_char_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

switch(chg) 

case CHG_HTON: 
if (*bufUse+size>;bufLen) 
return(-1); 
memcpy(buf+*bufUse,value,size); 
*bufUse=*bufUse+size; 
break; 
case CHG_NTOH: 
if (*bufUse+size>;bufLen) 
return(-1); 
memcpy(value,buf+*bufUse,size); 
*bufUse=*bufUse+size; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_move(chg,value,size,buf,bufLen,bufUse)); 
default: 
return(-1); 
}; 
return(0); 


static int chg_str_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

intlen,i; 

switch(chg) 

case CHG_HTON: 
if (*bufUse+size>;bufLen) 
return(-1); 
len=strlen((char *)value); 
strncpy(buf+*bufUse,(char *)value,size); 
if (len<size) 
memset(buf+*bufUse+len,' ',size-len); 
*bufUse=*bufUse+size; 
break; 
case CHG_NTOH: 
if (*bufUse+size>;bufLen) 
return(-1); 
strncpy((char *)value,buf+*bufUse,size); 
((char *)value)[size]='\0'; 
for(i=size-1; i>;0&&(((char *)value) ==' '); --i) 
((char *)value)='\0'; 
*bufUse=*bufUse+size; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_str_move(chg,value,size,buf,bufLen,bufUse)); 
default: 
return(-1); 
}; 
return(0); 


static int chg_str_llvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

inti,len; 
char*s; 
charc1,c2; 

s=(char *)value; 
switch(chg) 

case CHG_HTON: 
len=strlen(s); 
if ((len>;99)||(len>;size)||(*bufUse+len+2>;bufLen)) 
return(-1); 
buf[*bufUse]=(char)('0'+len/10); 
buf[*bufUse+1]=(char)('0'+len%10); 
if (len>;0) 
strncpy(buf+*bufUse+2,s,len); 
*bufUse=*bufUse+2+len; 
break; 
case CHG_NTOH: 
if (*bufUse+2>;bufLen) 
return(-1); 
c1=buf[*bufUse]; 
c2=buf[*bufUse+1]; 
if ((c1<'0')||(c1>;'9')||(c2<'0')||(c2>;'9')) 
return(-1); 
len=(c1-'0')*10+(c2-'0'); 
if (*bufUse+2+len>;bufLen) 
return(-1); 
if (len>;0) 
memcpy(s,buf+*bufUse+2,len); 
s[len]='\0'; 
*bufUse=*bufUse+2+len; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_str_move(chg,value,size,buf,bufLen,bufUse)); 
default: 
return(-1); 
}; 
return(0); 


static int chg_str_lllvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

inti,len; 
char*s; 
charc1,c2,c3; 

s=(char *)value; 
switch(chg) 

case CHG_HTON: 
len=strlen(s); 
if ((len>;999)||(len>;size)||(*bufUse+len+3>;bufLen)) 
return(-1); 
buf[*bufUse]=(char)('0'+len/100); 
buf[*bufUse+1]=(char)('0'+(len%100)/10); 
buf[*bufUse+2]=(char)('0'+len%10); 
if (len>;0) 
strncpy(buf+*bufUse+3,s,len); 
*bufUse=*bufUse+3+len; 
break; 
case CHG_NTOH: 
if (*bufUse+2>;bufLen) 
return(-1); 
c1=buf[*bufUse]; 
c2=buf[*bufUse+1]; 
c3=buf[*bufUse+2]; 
if ((c1<'0')||(c1>;'9') 
||(c2<'0')||(c2>;'9') 
||(c3<'0')||(c3>;'9')) 
return(-1); 
len=(c1-'0')*100+(c2-'0')*10+(c3-'0'); 
if (*bufUse+3+len>;bufLen) 
return(-1); 
if (len>;0) 
memcpy(s,buf+*bufUse+3,len); 
s[len]='\0'; 
*bufUse=*bufUse+3+len; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_str_move(chg,value,size,buf,bufLen,bufUse)); 
default: 
return(-1); 
}; 
return(0); 

static int chg_bit_bit(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

switch(chg) 

case CHG_HTON: 
if (*bufUse+size/8>;bufLen) 
return(-1); 
memcpy(buf+*bufUse,value,size); 
*bufUse=*bufUse+size/8; 
break; 
case CHG_NTOH: 
if (*bufUse+size/8>;bufLen) 
return(-1); 
memcpy(value,buf+*bufUse,size); 
*bufUse=*bufUse+size/8; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_move(chg,value,size/8,buf,bufLen,bufUse)); 
default: 
return(-1); 
}; 
return(0); 


static int chg_long_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

unsigned long*v; 
chars[32]; 
intlen; 
charformat[16]; 

v=(unsigned long *)value; 
switch(chg) 

case CHG_HTON: 
if (*bufUse+size>;bufLen) 
return(-1); 
sprintf(format,"%%0%du",size); 
sprintf(s,format,*v); 
len=strlen(s); 
if (len!=size) 
return(-1); 
memcpy(buf+*bufUse,s,len); 
*bufUse=*bufUse+size; 
break; 
case CHG_NTOH: 
if (*bufUse+size>;bufLen) 
return(-1); 
if (size>;30) 
return(-1); 
memcpy(s,buf+*bufUse,size); 
s[size]='\0'; 
if (sscanf(s,"%u",v)!=1) 
return(-1); 
*bufUse=*bufUse+size; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_move(chg,value,sizeof(long),buf,bufLen,bufUse)); 
default: 
return(-1); 
}; 
return(0); 

static int chg_long_lllvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

unsigned long*v; 
chars[32]; 
intlen; 
charformat[16]; 

v=(unsigned long *)value; 
switch(chg) 

case CHG_HTON: 
if (*bufUse+size+3>;bufLen) 
return(-1); 
sprintf(s,"%u",*v); 
len=strlen(s); 
if (len>;size) 
return(-1); 
buf[*bufUse]='0'+(char)(len/100); 
buf[*bufUse+1]='0'+(char)((len%100)/10); 
buf[*bufUse+2]='0'+(char)(len%10); 
memcpy(buf+(*bufUse)+3,s,len); 
*bufUse=*bufUse+len+3; 
break; 
case CHG_NTOH: 
if (*bufUse+3>;bufLen) 
return(-1); 
if (buf[*bufUse]<'0'||buf[*bufUse]>;'9' 
||buf[*bufUse+1]<'0'||buf[*bufUse+1]>;'9' 
||buf[*bufUse+2]<'0'||buf[*bufUse+2]>;'9') 
return(-1); 
len=(buf[*bufUse]-'0')*100+(buf[*bufUse+1]-'0') 
+(buf[*bufUse+2]-'0'); 
if (len>;size) 
return(-1); 
if (*bufUse+len+3>;bufLen) 
return(-1); 
if (len>;30) 
return(-1); 
memcpy(s,buf+*bufUse+3,len); 
s[len]='\0'; 
if (sscanf(s,"%u",v)!=1) 
return(-1); 
*bufUse=*bufUse+3+len; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_move(chg,value,sizeof(long),buf,bufLen,bufUse)); 
default: 
return(-1); 
}; 
return(0); 

static void del_dot(char *s) 

inti=0; 
intd=0; 

while(s!='\0') 

if (s=='.') 
d=1; 
if (d) 
s=s[i+1]; 
++i; 
}; 

static int add_dot(char *s) 

intlen; 
inti; 

i=0; 
while(s==' ') 
++i; 
if (i!=0) 
strcpy(s,s+i); 

len=strlen(s); 
if (len<2) 
return(-1); 

for(i=0; i<len; ++i) 
if (s<'0'||s>;'9') 
return(-1); 
s[len+1]='\0'; 
s[len]  =s[len-1]; 
s[len-1]=s[len-2]; 
s[len-2]='.'; 
return(0); 


static int chg_double_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

double*v; 
chars[64]; 
intlen; 
charformat[16]; 

v=(double *)value; 
switch(chg) 

case CHG_HTON: 
if (*bufUse+size>;bufLen) 
return(-1); 
if (*v<0) 
return(-1); 
sprintf(format,"%%0%d.2lf",size+1); 
sprintf(s,format,*v); 
del_dot(s); 
len=strlen(s); 
if (len!=size) 
return(-1); 
memcpy(buf+*bufUse,s,len); 
*bufUse=*bufUse+size; 
break; 
case CHG_NTOH: 
if (*bufUse+size>;bufLen) 
return(-1); 
if (size>;60) 
return(-1); 
memcpy(s,buf+*bufUse,size); 
s[size]='\0'; 
if (add_dot(s)!=0) 
return(-1); 
if (sscanf(s,"%lf",v)!=1) 
return(-1); 
*bufUse=*bufUse+size; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_move(chg,value,sizeof(double),buf,bufLen,bufUse)); 
default: 
return(-1); 
}; 
return(0); 

static int chg_double_xn(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

doublev; 
intr; 
charx; 

switch(chg) 

case CHG_HTON: 
if (*bufUse+size+1>;bufLen) 
return(-1); 
v=*(double *)value; 
if (v==0) 
*(buf+*bufUse)='0'; 
else if (v>;0) 
*(buf+*bufUse)=CHAR_CREDIT; 
else 

*(buf+*bufUse)=CHAR_DEBIT; 
v=-v; 
}; 
*bufUse=*bufUse+1; 
r=chg_double_n(chg,(void *)&v, 
size,buf,bufLen,bufUse); 
break; 
case CHG_NTOH: 
if (*bufUse+size+1>;bufLen) 
return(-1); 
x=*(buf+*bufUse); 
if (x!='0'&&x!=CHAR_CREDIT&&x!=CHAR_DEBIT) 
return(-1); 
*bufUse=*bufUse+1; 
r=chg_double_n(chg,(void *)&v, 
size,buf,bufLen,bufUse); 
if (r!=0) 
return(r); 
if (x=='0') 

if (v!=0) 
return(-1); 
*(double *)value=0; 

else if (x==CHAR_CREDIT) 
*(double *)value=v; 
else *(double *)value=-v; 
r=0; 
break; 
case CHG_HTOS: 
case CHG_STOH: 
return(chg_move(chg,value,sizeof(double),buf,bufLen,bufUse)); 
default: 
r=-1; 
}; 
return(r); 


static int chg_SecurityCtrlInfo_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

intr; 
AB8583_Security_Ctrl_Info *p; 

if (chg==CHG_HTOS||chg==CHG_STOH) 
return(chg_move(chg,value,sizeof(AB8583_Security_Ctrl_Info), 
buf,bufLen,bufUse)); 

if ((size!=16) 
||(*bufUse+size>;bufLen)) 
return(-1); 

p=(AB8583_Security_Ctrl_Info *)value; 
r=chg_long_n(chg,(void *)&p->;sync_counter, 
8,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;reserved, 
7,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_char_n(chg,(void *)&p->;key_type, 
1,buf,bufLen,bufUse); 
E: 
return(r); 


static int chg_BalanceAmountItem_n(int chg, 
AB8583_Balance_Amount_Item *p, 
int size,char *buf,int bufLen,int *bufUse) 

intr; 

if ((size!=20) 
||(*bufUse+size>;bufLen)) 
return(-1); 

r=chg_str_n(chg,(void *)&p->;account_type, 
2,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;amount_type, 
2,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;currency_code, 
3,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_double_xn(chg,(void *)&p->;amount, 
12,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 

E: 
return(r); 


static int chg_BalanceAmount_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

intr; 
AB8583_Balance_Amount*p; 
charlength[4]; 

if (chg==CHG_HTOS||chg==CHG_STOH) 
return(chg_move(chg,value,sizeof(AB8583_Balance_Amount), 
buf,bufLen,bufUse)); 
if ((size!=43) 
||(*bufUse+size>;bufLen)) 
return(-1); 

p=(AB8583_Balance_Amount *)value; 
switch(chg) 

case CHG_HTON: 
strcpy(length,"040"; 
r=chg_str_n(chg,length, 
3,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
break; 
case CHG_NTOH: 
r=chg_str_n(chg,p->;length, 
3,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
if (strcmp(p->;length,"040"!=0) 
{r=-1; 
goto E; 
}; 
break; 
default: 
r=-1; 
goto E; 
}; 
r=chg_BalanceAmountItem_n(chg,&p->;ledger_balance, 
20,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_BalanceAmountItem_n(chg,&p->;available_balance, 
20,buf,bufLen,bufUse); 
E: 
return(r); 


static int chg_MessageIndicator_lllvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

intr; 
AB8583_Message_Indicator*p; 
charlength[4]; 

if (chg==CHG_HTOS||chg==CHG_STOH) 
return(chg_move(chg,value,sizeof(AB8583_Message_Indicator), 
buf,bufLen,bufUse)); 
if ((size!=5) 
||(*bufUse+size>;bufLen)) 
return(-1); 

p=(AB8583_Message_Indicator *)value; 
switch(chg) 

case CHG_HTON: 
strcpy(length,"005"; 
r=chg_str_n(chg,length, 
3,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
break; 
case CHG_NTOH: 
r=chg_str_n(chg,length, 
3,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
if (strcmp(length,"005"!=0) 
{r=-1; 
goto E; 
}; 
break; 
default: 
r=-1; 
goto E; 
}; 

r=chg_char_n(chg,(void *)&p->;encryption_key_used, 
1,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_char_n(chg,(void *)&p->;mac_key_used, 
1,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_char_n(chg,(void *)&p->;message_effect, 
1,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;no_of_unlogged_txns, 
2,buf,bufLen,bufUse); 

E: 
return(r); 



static int chg_AuthOperationCode_lllvar(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

intr; 
AB8583_Auth_Operation_Code*p; 
charlength[4]; 

if (chg==CHG_HTOS||chg==CHG_STOH) 
return(chg_move(chg,value,sizeof(AB8583_Auth_Operation_Code), 
buf,bufLen,bufUse)); 
if ((size!=22) 
||(*bufUse+size+3>;bufLen)) 
return(-1); 

p=(AB8583_Auth_Operation_Code *)value; 
switch(chg) 

case CHG_HTON: 
strcpy(length,"022"; 
r=chg_str_n(chg,length, 
3,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
break; 
case CHG_NTOH: 
r=chg_str_n(chg,length, 
3,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
if (strcmp(length,"022"!=0) 
{r=-1; 
goto E; 
}; 
break; 
default: 
r=-1; 
goto E; 
}; 

r=chg_char_n(chg,(void *)&p->;auth_function_code, 
1,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_char_n(chg,(void *)&p->;auth_mode, 
1,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;auth_id_response_code, 
6,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;service_business_code, 
4,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;invoice_number, 
10,buf,bufLen,bufUse); 

E: 
return(r); 


static int chg_OriginalDataElements_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

intr; 
AB8583_Original_Data_Elements*p; 

if (chg==CHG_HTOS||chg==CHG_STOH) 
return(chg_move(chg,value,sizeof(AB8583_Original_Data_Elements), 
buf,bufLen,bufUse)); 
if ((size!=42) 
||(*bufUse+size>;bufLen)) 
return(-1); 

p=(AB8583_Original_Data_Elements *)value; 

r=chg_str_n(chg,(void *)&p->;org_message_type, 
4,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;org_system_trace_number, 
6,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;org_transaction_date_time, 
10,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;org_acqr_inst_id_code, 
11,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_str_n(chg,(void *)&p->;org_forw_inst_id_code, 
11,buf,bufLen,bufUse); 

E: 
return(r); 


static int chg_ReplacementAmounts_n(int chg,void *value, 
int size,char *buf,int bufLen,int *bufUse) 

intr; 
AB8583_Replacement_Amounts*p; 

if (chg==CHG_HTOS||chg==CHG_STOH) 
return(chg_move(chg,value,sizeof(AB8583_Replacement_Amounts), 
buf,bufLen,bufUse)); 
if ((size!=42) 
||(*bufUse+size>;bufLen)) 
return(-1); 

p=(AB8583_Replacement_Amounts *)value; 

r=chg_double_n(chg,&p->;actual_amount_of_transaction, 
12,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_double_n(chg,&p->;actual_amount_of_settlement, 
12,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_double_xn(chg,&p->;actual_amount_of_transaction_fee, 
8,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_double_xn(chg,&p->;actual_amount_of_settlement_fee, 
8,buf,bufLen,bufUse); 
E: 
return(r); 


/************************  HTON  or NTOH *********************/ 

static int chg_AB8583_n(int chg,AB8583 *data, 
char *buf,int bufLen,int *bufUse,int *lastField) 

intr,i; 

r=chg_str_n(chg,&data->;message_type, 
4,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 
r=chg_bit_bit(chg,&data->;primary_bitmap, 
64,buf,bufLen,bufUse); 
if (r!=0) 
goto E; 

for(i=0, r=0; (r==0)&&(chgList.bitName!=0); ++i) 
   if (AB8583_bitIsSet(data,chgList.bitName)) 
   { 
*lastField=chgList.bitName; 
r=(*chgList.chgF)(chg, 
((char *)data)+chgList.offset, 
chgList.size, 
buf,bufLen,bufUse); 
   }; 

E: 
return(r); 


int AB8583_hton(AB8583 *data,char *buf,int bufLen,int *bufUse,int *lastField) 

intr; 

*bufUse=0; 
*lastField=0; 
r=chg_AB8583_n(CHG_HTON,data,buf,bufLen,bufUse,lastField); 
return(r); 


int AB8583_ntoh(AB8583 *data,char *buf,int bufLen,int *bufUse,int *lastField) 

intr; 

AB8583_clear(data); 
*bufUse=0; 
*lastField=0; 
r=chg_AB8583_n(CHG_NTOH,data,buf,bufLen,bufUse,lastField); 
return(r); 


int AB8583_htos(AB8583 *data,char *buf,int bufLen,int *bufUse,int *lastField) 

intr; 

*bufUse=0; 
*lastField=0; 
r=chg_AB8583_n(CHG_HTOS,data,buf,bufLen,bufUse,lastField); 
return(r); 


int AB8583_stoh(AB8583 *data,char *buf,int bufLen,int *bufUse,int *lastField) 

intr; 

AB8583_clear(data); 
*bufUse=0; 
*lastField=0; 
r=chg_AB8583_n(CHG_STOH,data,buf,bufLen,bufUse,lastField); 
return(r); 


int AB8583_Val_to_Val(int BitNum,AB8583 *indata,AB8583 *outdata) 

int i; 

for(i=0;(chgList.bitName!=BitNum)&&(chgList.bitName!=0);i++); 

if(chgList.bitName==0) return(-1); 
memcpy((char *)outdata+chgList.offset, 
(char *)indata+chgList.offset,chgList.valsize); 
if(AB8583_setBit(outdata,BitNum)!=0) return(-1); 
return(0); 
}




转至:http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=151685

ISO8583协议文档说明

 


This is NOT the complete standard. You must obtain this from ISO. This is a summary that I use when teaching financial system messaging, and am asked for on a frequent basis.

There are many different implementations of ISO8583, any many local variations. Fields applicable to the ISO standard are identified as 'True' in the standard column.


Message types

ISO8583 message number

Description

0100

Authorisation request

0101

Authorisation request repeat

0102

Authorisation completion confirmation

0103

Authorisation completion confirmation repeat

0110

Authorisation request response

0112

Authorisation completion response

0120

Authorisation advice

0121

Authorisation advice repeat

0122

Authorisation advice completion confirmation

0123

Authorisation advice completion confirmation rpt

0130

Authorisation advice response

0132

Authorisation advice completion response

0200

Financial Transaction request

0201

Financial Transaction request repeat

0202

Financial transaction completion confirmation

0203

Financial transaction completion confirmation rpt

0210

Financial transaction request response

0212

Financial transaction completion response

0220

Financial transaction advice

0221

Financial transaction advice repeat

0222

Financial transaction advice completion confirmati

0223

Financial txn advice completion confirmation rpt

0230

Financial txn advice response

0232

Financial txn advice completion response

0300

Acquirer file update request

0302

Card issuer file update request

0310

Acquirer file update request response

0312

Card issuer file update request response

0320

Acquirer file update advice

0322

Card issuer file update advice

0330

Acquirer file update advice response

0332

Card issuer file update advice response

0400

Acquirer reversal request

0401

Acquirer reversal request response

0402

Card issuer reversal request

0403

Card issuer reversal request repeat

0410

Acquirer reversal request response

0412

Card issuer reversal request response

0420

Acquirer reversal advice

0421

Acquirer reversal advice repeat

0422

Card issuer reversal advice

0423

Card issuer reversal advice repeat

0430

Acquirer reversal advice response

0432

Card issuer reversal advice response

0500

Acquirer reconciliation request

0501

Acquirer reconciliation request repeat

0502

Card issuer reconciliation request

0503

Card issuer reconciliation request repeat

0510

Acquirer reconcilaition request response

0512

Card issuer reconciliation request response

0520

Acquirer reconciliation advice

0521

Acquirer reconciliation advice repeat

0522

Card issuer reconciliation advice

0523

Card issuer reconciliation advice repeat

0530

Acquirer reconciliation advice response

0532

Card issuer reconciliation advice response

0600

Administrative request

0601

Administrative request repeat

0610

Administrative request response

0620

Administrative advice

0621

Administrative advice repeat

0630

Administrative advice response

0800

Network management request

0801

Network management request repeat

0810

Network management request response

0820

Network management advice

0821

Network management advice repeat

0830

Network management advice response

 Bit position values

ISO BIT Num

Field Name

Data-type

Length

Format

Full description

ISO8583 (1987) standard

1

Bit Map Extended

h

16

 

Secondary bit map indicating the presence or absence of bits in range 65-128 in the message being transmitted.

TRUE

2

Primary account number (PAN)

n

19

LLVAR

Customer PAN, used to route messages.

TRUE

3

Precessing code

n

6

 

Define the transaction type 3x2 digit fields. 1&2=type of trans, 3&4=type of account, 5&6=to account (zeroes)

TRUE

4

Amount, transaction

n

12

 

Transaction amount in (lowest unit local currency) at the acquirer.

TRUE

5

Amount, Settlement

n

12

  

TRUE

6

Amount, cardholder billing

n

12

 

Amount in (lowest unit local currency) of amount to be debited from the account held by the issuer.

TRUE

7

Transmission date & time

n

10

mmddhhmmss

Message transmission date and time in GMT. Switch completes this field.

TRUE

8

Amount, Cardholder billing fee

n

8

  

TRUE

9

Conversion rate, Settlement

n

8

  

TRUE

10

Conversion rate, cardholder billing

n

8

 

Conversion rate applied to forex txn amount. format ABBBBBBB where A is the decimal point position from the right and B is the conversion factor which when multiplied by field 4 gives field 6.

TRUE

11

Systems trace audit number

n

6

 

Sequence number assigned by message originator. Stays Unchanged through txn life.

TRUE

12

Time, Local transaction

n

6

hhmmss

Time of the local transaction

TRUE

13

Date, Local transaction

n

4

mmdd

Date of the local transaction

TRUE

14

Date, Expiration

n

4

yymm

Card expiration date

TRUE

15

Date, Settlement

n

4

mmdd

Date of settlement

TRUE

16

Date, conversion

n

4

mmdd

 

TRUE

17

Date, capture

n

4

mmdd

 

TRUE

18

Merchant type

n

4

 

Category code of merchant acquirer. Auth transactions only.

TRUE

19

Acquiring institution country code

n

3

 

Country code of acquiring institution

TRUE

20

PAN Extended, country code

n

3

  

TRUE

21

Forwarding institution. country code

n

3

  

TRUE

22

Point of service entry mode

n

3

 

PIN/PAN entry mode. Format PPN where PP=Pos entry mode and N=PIN entry mode.

TRUE

23

Application PAN number

n

3

 

Identifies and differentiates cards with the same PAN

TRUE

24

Network International identifier

n

3

  

TRUE

25

Point of service condition code

n

2

 

Condition under which the transaction takes place at POS. Various values.

TRUE

26

Point of service capture code

n

2

 

Maximum number of PIN digits supported.

TRUE

27

Authorising identification response length

n

1

  

TRUE

28

Amount, transaction fee

n

8

  

TRUE

29

Amount. settlement fee

n

8

  

TRUE

30

Amount, transaction processing fee

n

8

  

TRUE

31

Amount, settlement processing fee

n

8

  

TRUE

32

Acquiring institution identification code

n

11

LLVAR

Code identifying the acquirer

TRUE

33

Forwarding institution identofication code

n

11

LLVAR

 

TRUE

34

Primary account number, extended

n

28

LLVAR

 

TRUE

35

Track 2 data

z

37

LLVAR

Information encoded on track 2 of the magstripe card

TRUE

36

Track 3 data

n

104

LLLVAR

 

TRUE

37

Retrieval reference number

an

12

 

Data for matching original txn Julian date+term sequence

TRUE

38

Authorisation identification response

an

6

 

Authorisation ID assigned by authorising institution

TRUE

39

Response code

an

2

 

Disposition of message: Approved, incorrect PIN etc etc)

TRUE

40

Service restriction code

an

3

  

TRUE

41

Card acceptor terminal identification

ans

8

 

Unique code identifying the terminal at the card acceptor location.

TRUE

42

Card acceptor identification code

ans

15

 

Code identifying the card acceptor.

TRUE

43

Card acceptor name/location

ans

40

 

Full terminal address (1-23 address 24-36 City 37-38 State 39-40 Country)

TRUE

44

Additional response data

an

25

LLVAR

Used for POS referrals, format errors, or VISA acquired auth responses.

TRUE

45

Track 1 Data

an

76

LLVAR

 

TRUE

46

Additional data - ISO

an

999

LLLVAR

 

TRUE

47

Additional data - National

an

999

LLLVAR

 

TRUE

48

Additional data - Private

an

999

LLLVAR

 

TRUE

49

Currency code, transaction

a

3

 

Code (ISO?) of the local currency of the acquirer.

TRUE

50

Currency code, settlement

an

3

  

TRUE

51

Currency code, cardholder billing

a

3

 

Code (ISO?) of the currency used for cardholder billing.

TRUE

52

Personal Identification number data

h

16

 

Encrypted PIN block

TRUE

53

Security related control information

n

18

  

TRUE

54

Additional amounts

an

120

 

Mandatory for txn response. Contains codes for account, amount and currency types and amounts.

TRUE

55

Reserved ISO

ans

999

LLLVAR

 

TRUE

56

Reserved ISO

ans

999

LLLVAR

 

TRUE

57

Reserved National

ans

999

LLLVAR

 

TRUE

58

Reserved National

ans

999

LLLVAR

 

TRUE

59

Reserved for national use

ans

999

LLLVAR

 

TRUE

60

Advice/reason code (private reserved)

an

7

LVAR

ICC reason for reveral or advice.

TRUE

61

Reserved Private

ans

999

LLLVAR

 

TRUE

62

Reserved Private

ans

999

LLLVAR

 

TRUE

63

Reserved Private

ans

999

LLLVAR

 

TRUE

64

Message authentication code (MAC)

h

16

 

MAC check code

TRUE

65

Bit map, tertiary

h

16

 

Tertiary bit map indicating the presence or absence of bits in positions 129-192 in the message being transmitted.

TRUE

66

Settlement code

n

1

  

TRUE

67

Extended payment code

n

2

  

TRUE

68

Receiving institution country code

n

3

  

TRUE

69

Settlement institution county code

n

3

  

TRUE

70

Network management Information code

n

3

 

Network processing info. Various 3digit codes for sign on and off, keychange, cutover, handshake etc

TRUE

71

Message number

n

4

  

TRUE

72

Message number, last

n

4

  

TRUE

73

Date, Action

n

6

yymmdd

 

TRUE

74

Credits, number

n

10

  

TRUE

75

Credits, reversal number

n

10

  

TRUE

76

Debits, number

n

10

  

TRUE

77

Debits, reversal number

n

10

  

TRUE

78

Transfer number

n

10

  

TRUE

79

Transfer, reversal number

n

10

  

TRUE

80

Inquiries number

n

10

  

TRUE

81

Authorisations, number

n

10

  

TRUE

82

Credits, processsing fee amount

n

12

  

TRUE

83

Credits, transaction fee amount

n

12

  

TRUE

84

Debits, processing fee amount

n

12

  

TRUE

85

Debits, transaction fee amount

n

12

  

TRUE

86

Credits, amount

n

15

  

TRUE

87

Credits, reversal amount

n

15

  

TRUE

88

Debits, amount

n

15

  

TRUE

89

Debits, reversal amount

n

15

  

TRUE

90

Original data elements

n

42

 

Data elements in a reversal identifying the original txn. These elements are formatted specifically.

TRUE

91

File update code

an

1

 

Code indicating type of file update operation (1=add 2=change 3=delete 4=enquiry)

TRUE

92

File security code

n

2

  

TRUE

93

Response indicator

n

5

  

TRUE

94

Service indicator

an

7

  

TRUE

95

Replacement amounts

an

42

 

Actual amounts dispensed and settled for partial reversals. If not partial both amounts are zero.

TRUE

96

Message security code

an

8

 

Password to net management and file Update. Not currently validated by LINK

TRUE

97

Amount, net settlement

n

16

  

TRUE

98

Payee

ans

25

  

TRUE

99

Settlement institution identification code

n

11

LLVAR

 

TRUE

100

Receiving institution identification code

n

11

LLVAR

 

TRUE

101

File name

ans

17

 

Name of file being accessed for a file update.

TRUE

102

Account identification 1

ans

28

LLVAR

Identifies the 'from' account in a transfer

TRUE

103

Account identification 2

ans

28

LLVAR

 

TRUE

104

Transaction description

ans

100

LLVAR

 

TRUE

105

Reserved for ISO use

ans

999

LLLVAR

 

TRUE

106

Reserved for ISO use

ans

999

LLLVAR

 

TRUE

107

Reserved for ISO use

ans

999

LLLVAR

 

TRUE

108

Reserved for ISO use

ans

999

LLLVAR

 

TRUE

109

Reserved for ISO use

ans

999

LLLVAR

 

TRUE

110

Reserved for ISO use

ans

999

LLLVAR

 

TRUE

111

Reserved for ISO use

ans

999

LLLVAR

 

TRUE

112

Reserved for national use

ans

999

LLLVAR

 

TRUE

113

Authorising agent institution id code

n

11

LLVAR

Institution approving or denying the transaction.

TRUE

114

Reserved for national use

ans

999

LLLVAR

 

TRUE

115

Reserved for national use

ans

999

LLLVAR

 

TRUE

116

Reserved for national use

ans

999

LLLVAR

 

TRUE

117

Reserved for national use

ans

999

LLLVAR

 

TRUE

118

Reserved for national use

ans

999

LLLVAR

 

TRUE

119

Reserved for national use

ans

999

LLLVAR

 

TRUE

120

Reserved for private use

ans

999

LLLVAR

 

TRUE

121

Reserved for private use

ans

999

LLLVAR

 

TRUE

122

Reserved for private use

ans

999

LLLVAR

 

TRUE

123

Reserved for private use

ans

999

LLLVAR

 

TRUE

124

Info Text

ans

255

LLLVAR

For file updates, cardholder file maint data, for admin advices the first 255 bytes in error.

TRUE

125

Network management information

ans

50

LLLVAR

Additional net management info: 1-16 working key, 17-20 check value, 21-50 spaces

TRUE

126

Issuer trace id

ans

6

LLLVAR

Used by issuer to label the txn with his own transaction id. Unique within business day. Unchanged through transaction life.

TRUE

127

Reserved for private use

ans

999

LLLVAR

 

TRUE

128

Message Authentication code

h

16

 

MAC check code

TRUE

 Base-24 operational variances:

 ACI's Base-24 external messaging implements the following differences to the 'vanilla' ISO8583 format described above. Refer to the ACI manual BA-DH011-02 for details.

Prior to the ISO8583 message itself, Base-24 implements four additional fields:

Data Prefix (optional, 0-9 bytes)

  • IMS/CICS transaction code (optional, 0-9 bytes)
  • Start of Base-24 header (mandatory literal 'ISO', 3 bytes)
  • Base-24 header (Mandatory, 9 bytes)

 

Data Prefix

IMS/CICS Tran code

ISO Header

Base-24 Header

Msg Type

Primary Bit map

Data elements

123456789

123456789

ISO

123456789

1234

bbbbbb

-variable-

Note that all Base-24 fields are transmitted in display format (i.e. all Binary fields are converted to display for messaging) to avoid complications is ASCII -EBCDIC conversion and communications transparency. This results in binary fields (such as the primary bit map of 64 bits) being 16 bytes in length rather than the 8 bytes defined in the ISO8583 standard.

 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
银联 ISO8583 文档: 前 言 VI 1 范围 1 2 规范性引用文件 1 3 术语和定义 1 3.1 受理方 (ACQUIRER) 1 3.2 发卡方 (ISSUER) 1 3.3 转入方 (TRANSFER-IN) 2 3.4 转出方 (TRANSFER-OUT) 2 3.5 交换系统 (BANK CARD SWITCHING SYSTEM) 2 3.6 请求 (REQUEST) 2 3.7 响应码 (RESPONSE CODE) 2 3.8 冲正 (REVERSAL) 2 3.9 清算 (SETTLEMENT) 2 3.10 交易 (TRANSACTION) 2 3.11 通知 (ADVICE) 2 3.12 报文 (MESSAGE) 2 3.13 数据包 (DATAGRAM) 2 4 公共支付交易处理说明 3 4.1 公共支付业务联机交易处理 3 4.1.1 委托关系建立/委托关系撤销(0100/0110) 3 4.1.2 订购(类似预授权0100/0110) 3 4.1.3 金融类交易(0200/0210) 5 4.1.4 金融类撤销交易(0200/0210) 8 4.1.5 查询类交易(0200/0210) 9 4.1.6 转账类交易(0200/0210) 10 4.1.7 冲正通知类交易(0420/0430) 10 4.1.8 金融通知类交易(0220/0230) 12 4.1.9 与服务提供商无关的交易 12 4.2 增值业务文件方式处理 13 4.2.1 非实时查询交易 13 4.2.2 非实时缴费/充值交易 14 4.2.3 批量代收/批量代付文件方式 14 4.2.4 委托关系建立/委托关系撤销文件方式 15 4.3 超时限定 16 4.4 公共支付平台二级清算处理 17 4.4.1 截账日切通知(0820/0830) 17 4.4.2 批结对账交易(0522/0532) 17 4.4.3 公共支付平台二级清算产生的交易处理流程 18 4.4.4 公共支付平台清分清算的时序 19 4.5 管理及安全控制交易处理 19 4.5.1 网络管理交易(0820/0830) 19 4.5.2 重置密钥(0800/0810) 21 4.6 交易的异常处理流程 21 4.6.1 概述 21 4.6.2 异常处理原则 21 4.6.3 通信异常 22 5 报文域定义 31 5.1 说明 31 5.2 数据类型定义 31 5.3 域名称及定义 31 5.3.1 报文头 31 5.3.2 MTI 报文类型 36 5.3.3 第一位图 37 5.3.4 第二位图 37 5.3.5 域2 主账号PAN 37 5.3.6 域3 交易处理码 38 5.3.7 域4 交易金额 40 5.3.8 域7交易传输时间 40 5.3.9 域11系统跟踪号 41 5.3.10 域12受卡方所在地时间 41 5.3.11 域13受卡方所在地日期 42 5.3.12 域14卡有效期 42 5.3.13 域15清算日期 42 5.3.14 域18商户类型 43 5.3.15 域22服务点输入方式码 43 5.3.16 域25服务点条件码 44 5.3.17 域26服务点PIN获取码 44 5.3.18 域32代理机构标识码 45 5.3.19 域33发送机构标识码 45 5.3.20 域35第二磁道数据 45 5.3.21 域36第三磁道数据 46 5.3.22 域37检索参考号 46 5.3.23 域39应答码 47 5.3.24 域41受卡机终端标识码 47 5.3.25 域42受卡方标识码 47 5.3.26 域43受卡方名称地址 47 5.3.27 域44附加响应数据 48 5.3.28 域48附加自定义数据 48 5.3.29 域49交易货币代码 54 5.3.30 域50清算货币代码 54 5.3.31 域52个人标识码数据 54 5.3.32 域53安全控制信息 55 5.3.33 域54实际余额 56 5.3.34 域59明细查询数据 57 5.3.35 域60自定义域 61 5.3.36 域61证件编号 63 5.3.37 域70网络管理信息码 66 5.3.38 域74 贷记交易笔数 67 5.3.39 域75 冲正贷记笔数 67 5.3.40 域76 借记交易笔数 67 5.3.41 域77 冲正借记笔数 67 5.3.42 域78 转账笔数 68 5.3.43 域79 冲正转账笔数 68 5.3.44 域80 查询笔数 68 5.3.45 域81 授权笔数 68 5.3.46 域82 贷记服务费金额 69 5.3.47 域84 借记服务费金额 69 5.3.48 域86 贷记交易金额 69 5.3.49 域87 冲正贷记金额 70 5.3.50 域88 借记交易金额 70 5.3.51 域89 冲正借记金额 70 5.3.52 域90原始数据元 70 5.3.53 域96报文安全码 71 5.3.54 域99清算机构代码 71 5.3.55 域100接收机构标识码 72 5.3.56 域102账户标识1 72 5.3.57 域103账户标识2 72 5.3.58 域121 交换系统保留 72 5.3.59 域122受理方保留 75 5.3.60 域123发卡方保留 75 5.3.61 域128报文鉴别码MAC 75 6 公共支付平台交易接口报文 77 6.1 说明 77 6.1.1 符号约定 77 6.1.2 报文格式说明示意 77 6.1.3 报文域条件数据元说明 78 6.2 公共支付平台联机交易报文 78 6.2.1 欠费查询/资金户余额查询报文 78 6.2.2 账单明细查询报文 79 6.2.3 银行卡余额查询 81 6.2.4 订购(预授权)报文 82 6.2.5 订购撤销(预授权撤销)报文 84 6.2.6 订购完成(预授权完成)报文 85 6.2.7 订购完成撤销(预授权完成撤销) 86 6.2.8 缴费/充值报文 87 6.2.9 缴费撤销报文 89 6.2.10 冲正通知报文 90 6.2.11 建立/撤销委托关系报文 93 6.2.12 查询委托关系报文 95 6.2.13 转账类交易报文 96 6.2.14 与服务提供商无关的交易报文 99 6.3 清分清算和日终批处理的报文接口 错误!未定义书签。 6.3.1 批结对账交易报文 错误!未定义书签。 6.3.2 截账日切通知报文 错误!未定义书签。 6.4 网络管理及安全控制报文 107 6.4.1 网络管理报文 107 6.4.2 安全控制报文 109 7 缴费终端接口报文 111 7.1 说明 111 7.1.1 标准接口报文及流程图 111 7.1.2 消息格式 111 7.1.3 消息格式的表示方法 111 7.2 委托关系建立/委托关系撤销终端报文 111 7.3 待缴费用/资金户余额查询终端报文 111 7.4 缴费账单明细查询终端报文 111 7.5 缴费/缴费撤销终端报文 111 7.6 银行卡转出/银行卡转入终端报文 111 7.7 终端签到 111 7.8 终端签退 错误!未定义书签。 7.9 终端批结对账交易、批上送完成通知(可选) 错误!未定义书签。 7.10 终端批上送记录(可选) 错误!未定义书签。 8 文件接口规范 111 8.1 概述 111 8.1.1 目的 111 8.1.2 适用范围 111 8.1.3 相关文档 111 8.2 文件存取方式说明 111 8.2.1 FTP方式 112 8.2.2 WEB方式 113 8.3 文件使用说明 115 8.3.1 基本的命名约定 115 8.3.2 记录格式基本约定 116 8.3.3 流水文件说明 120 8.3.4 批量代收/代付文件说明 121 8.4 文件格式说明 123 8.4.1 符号定义 123 8.4.2 流水文件格式 123 8.4.3 批量代收/代付文件格式 125 8.4.4 非实时待缴费用托管文件格式 129 8.4.5 委托关系文件格式 130 9 通信接口规范 131 9.1 目的 131 9.2 网络架构 132 9.3 网络接口 132 9.3.1 接入设备基本要求 132 9.3.2 通信软件接口 132 10 数据安全传输控制 134 10.1 个人标识(PIN)的加密和解密 134 10.1.1 PIN的长度 135 10.1.2 PIN的字符集 136 10.1.3 PIN格式 136 10.1.4 PIN异常的处理 137 10.2 报文来源正确性鉴别MAC 137 10.2.1 MAC报文域的选择 138 10.2.2 MAC域的构成规则 140 10.2.3 MAC的计算 140 10.2.4 MAC错误异常处理 141 附 录 A 142 参考文献 154

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值