- 浏览: 60903 次
- 性别:
- 来自: 上海
最新评论
-
lizhou:
周sir玩的深啊
认识BOM -
lixinyouapple:
Exception in thread "main& ...
poi读写word模板 -
apchy:
poi需要3.7
poi读写word模板 -
1154934572:
为什么我的程序找不到row.getTableCells();这 ...
poi读写word模板 -
phrmgb:
缺少的包找到了
poi读写word模板
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 01 */ {0,"BIT MAP,EXTENDED", 8, 0, 0, 2, NULL,0},
/* FLD 02 */ {0,"PRIMARY ACCOUNT NUMBER", 22, 0, 2, 0, NULL,0},
/* FLD 03 */ {0,"PROCESSING CODE", 6, 0, 0, 0, NULL,0},
/* FLD 04 */ {0,"AMOUNT, TRANSACTION", 12, 0, 0, 1, NULL,0},
/* FLD 05 */ {0,"NO USE", 12, 0, 0, 0, NULL,0},
/* FLD 06 */ {0,"NO USE", 12, 0, 0, 0, NULL,0},
/* FLD 07 */ {0,"TRANSACTION DATE AND TIME", 10, 0, 0, 0, NULL,0},
/* FLD 08 */ {0,"NO USE", 8, 0, 0, 0, NULL,0},
/* FLD 09 */ {0,"NO USE", 8, 0, 0, 0, NULL,0},
/* FLD 10 */ {0,"NO USE", 8, 0, 0, 0, NULL,0},
/* FLD 11 */ {0,"SYSTEM TRACE AUDIT NUMBER", 6, 0, 0, 1, NULL,0},
/* FLD 12 */ {0,"TIME, LOCAL TRANSACTION", 6, 0, 0, 0, NULL,0},
/* FLD 13 */ {0,"DATE, LOCAL TRANSACTION", 4, 0, 0, 0, NULL,0},
/* FLD 14 */ {0,"DATE, EXPIRATION", 4, 0, 0, 0, NULL,0},
/* FLD 15 */ {0,"DATE, SETTLEMENT", 4, 0, 0, 0, NULL,0},
/* FLD 16 */ {0,"NO USE", 4, 0, 0, 0, NULL,0},
/* FLD 17 */ {0,"DATE, CAPTURE", 4, 0, 0, 0, NULL,0},
/* FLD 18 */ {0,"MERCHANT'S TYPE", 4, 0, 0, 0, NULL,0},
/* FLD 19 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 20 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 21 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 22 */ {0,"POINT OF SERVICE ENTRY MODE", 3, 0, 0, 0, NULL,0},
/* FLD 23 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 24 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 25 */ {0,"POINT OF SERVICE CONDITION CODE", 2, 0, 0, 0, NULL,0},
/* FLD 26 */ {0,"NO USE", 2, 0, 0, 0, NULL,0},
/* FLD 27 */ {0,"NO USE", 1, 0, 0, 0, NULL,0},
/* FLD 28 */ {0,"field27", 6, 0, 0, 0, NULL,0},
/* FLD 29 */ {0,"NO USE", 8, 0, 1, 0, NULL,0},
/* FLD 30 */ {0,"NO USE", 8, 0, 1, 0, NULL,0},
/* FLD 31 */ {0,"NO USE", 8, 0, 1, 0, NULL,0},
/* FLD 32 */ {0,"ACQUIRER INSTITUTION ID. CODE", 11, 0, 2, 0, NULL,0},
/* FLD 33 */ {0,"FORWARDING INSTITUTION ID. CODE", 11, 0, 2, 0, NULL,0},
/* FLD 34 */ {0,"NO USE", 28, 0, 2, 0, NULL,0},
/* FLD 35 */ {0,"TRACK 2 DATA", 37, 0, 2, 0, NULL,0},
/* FLD 36 */ {0,"TRACK 3 DATA",104, 0, 3, 0, NULL,0},
/* FLD 37 */ {0,"RETRIEVAL REFERENCE NUMBER", 12, 0, 0, 0, NULL,0},
/* FLD 38 */ {0,"AUTH. IDENTIFICATION RESPONSE", 6, 0, 0, 0, NULL,0},
/* FLD 39 */ {0,"RESPONSE CODE", 2, 0, 0, 0, NULL,0},
/* FLD 40 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 41 */ {0,"CARD ACCEPTOR TERMINAL ID.", 8, 0, 0, 0, NULL,0},
/* FLD 42 */ {0,"CARD ACCEPTOR IDENTIFICATION CODE", 15, 0, 0, 0, NULL,0},
/* FLD 43 */ {0,"CARD ACCEPTOR NAME LOCATION", 40, 0, 0, 0, NULL,0},
/* FLD 44 */ {0,"ADDITIONAL RESPONSE DATA", 25, 0, 2, 0, NULL,0},
/* FLD 45 */ {0,"NO USE", 76, 0, 2, 0, NULL,0},
/* FLD 46 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 47 */ {0,"field47", 999, 0, 3, 0, NULL,0},
/* FLD 48 */ {0,"ADDITIONAL DATA --- PRIVATE", 999, 0, 3, 0, NULL,0},
/* FLD 49 */ {0,"CURRENCY CODE,TRANSACTION", 3, 0, 0, 0, NULL,0},
/* FLD 50 */ {0,"CURRENCY CODE,SETTLEMENT", 3, 0, 0, 0, NULL,0},
/* FLD 51 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 52 */ {0,"PERSONAL IDENTIFICATION NUMBER DATA", 8, 0, 0, 2, NULL,0},
/* FLD 53 */ {0,"SECURITY RELATED CONTROL INformATION", 16, 0, 0, 0, NULL,0},
/* FLD 54 */ {0,"ADDITIONAL AMOUNTS",120, 0, 3, 0, NULL,0},
/* FLD 55 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 56 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 57 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 58 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 59 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 60 */ {0,"NO USE", 5, 0, 3, 0, NULL,0},
/* FLD 61 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 62 */ {0,"NO USE", 11, 0, 3, 0, NULL,0},
/* FLD 63 */ {0,"NO USE", 11, 0, 3, 0, NULL,0},
/* FLD 64 */ {0,"MESSAGE AUTHENTICATION CODE FIELD", 8, 0, 0, 2, NULL,0},
/* FLD 65 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 66 */ {0,"NO USE", 1, 0, 0, 0, NULL,0},
/* FLD 67 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 68 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 69 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 70 */ {0,"SYSTEM MANAGEMENT INformATION CODE", 3, 0, 0, 0, NULL,0},
/* FLD 71 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 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的计算。
1位图域名
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数据域的数据包需使用此域。
typedef struct
{
long sync_counter;
char keytype;
} AB8583_Security_Ctrl_Info;
typedef struct
{
char length[4];
struct
{
char account_type[3];
char amount_type[3];
char currency_code[4];
double amount;
} ledger_balance_amount;
struct
{
char account_type[3];
char amount_type[3];
char currency_code[4];
double amount;
} available_balance_amount;
} AB8583_Balance_Amount;
typedef struct
{
char encryption_key_used;
char mac_key_used;
char message_effect;
char no_of_unlogged_txns;
} AB8583_Message_Indicator;
typedef struct
{
char auth_function_code;
char auth_mode;
char auth_id_response_code[7];
char service_business_code[5];
char invoice_number[11];
} AB8583_Auth_Operation_Code;
typedef struct
{
char org_message_type[5];
char org_system_trace_number[7];
char org_transaction_date_time[11];
char org_acqr_inst_id_code[12];
char ora_forw_inst_id_code[12];
} AB8583_Original_Data_Elements;
typedef struct
{
double actual_amount_of_transaction;
double actual_amount_of_settlement;
double actual_amount_of_transaction_fee;
double actual_amount_of_settlement_fee;
} AB8583_Replacement_Amounts;
BIT DATA_NAME TYPE
typedef struct
{
char message_type[5];
/***
MESSAGE_TYPE_IDENTIFICATION N4
0100 授权类请求消息(授权,撤消授权,余额查询)
0110 授权类应答消息(授权,撤消授权,余额查询)
0200 金融类请求消息(取款,存款,消费,退款)
0210 金融类应答消息(取款,存款,消费,退款)
0420 冲正类报告消息(取款,存款,消费,退款,授权)
0430 冲正类应答消息(取款,存款,消费,退款,授权)
0524 对帐类报告消息(ATM结算对帐,POS结算对帐)
0534 对帐类应答消息(ATM结算对帐,POS结算对帐)
0800 网络业务管理类请求消息(重置密钥)
0810 网络业务管理类应答消息(重置密钥)
0820 网络业务管理类报告消息(状态设置,广播通知,申请重置密钥)
0830 网络业务管理类应答消息(状态设置,广播通知,申请重置密钥)
****/
char primary_account_number[20];
/* 2 PRIMARY_ACCOUNT_NUMBER N...19(LLVAR) */
char processing_code[7];
/* 3 PROCESSING_CODE N6 */
double amount_of_transactions;
/* 4 AMOUNT_OF_TRANSACTIONS N12 */
double amount_of_settlement;
/* 5 AMOUNT_OF_SETTLEMENT N12 */
char transmission_date_and_time[11];
/* 7 TRANSMISSION_DATE_AND_TIME N10 */
long system_trace_audit_number;
/* 11 SYSTEM_TRACE_AUDIT_NUMBER N6 */
char time_of_local_transaction[7];
/* 12 TIME_OF_LOCAL_TRANSACTION N6 */
char date_of_local_transaction[5];
/* 13 DATE_OF_LOCAL_TRANSACTION N4 */
char date_of_settlement[5];
/* 15 DATE_OF_SETTLEMENT N4 */
char date_of_capture[5];
/* 17 DATE_OF_CAPTURE N4 */
char business_type[4];
/* 18 BUSINESS_TYPE AN3 */
char point_of_service_entry_mode[4];
/* 22 POINT_OF_SERVICE_ENTRY_MODE N3 */
char point_of_service_PIN_capture_code[3];
/* 26 POINT_OF_SERVICE_PIN_CAPTURE_CODE N2 */
double fee_of_transaction;
/* 28 FEE_OF_TRANSACTION N8 */
double fee_of_settlement;
/* 29 FEE_OF_SETTLEMENT X+N8 */
char acquiring_institution_id_code[12];
/* 32 ACQUIRING_INSTITUTION_IDENTIFICATION_CODE N..11(LLVAR) */
char forwarding_institution_id_code[12];
/* 33 FORWARDING_INSTITUTION_IDENTIFICATION_CODE N..11(LLVAR) */
char track_2_data[38];
/* 35 TRACK_2_DATA Z...37(LLVAR) */
char track_3_data[105];
/* 36 TRACK_3_DATA Z...104(LLLVAR) */
long retrieval_reference_number;
/* 37 RETRIEVAL_REFERENCE_NUMBER AN12 */
char auth_id_response[7];
/* 38 AUTHORIZATION_IDENTIFICATION_RESPONSE AN6 */
char response_code[3];
/* 39 RESPONSE_CODE AN2 */
char card_acceptor_terminal_id[9];
/* 41 CARD_ACCEPTOR_TERMINAL_IDENTIFICATION ANS8
前两位的定义如下:
51 ATM终端
52 银行POS
53 商户POS */
char card_acceptor_id_code[16];
/* 42 CARD_ACCEPTOR_IDENTIFICATION_CODE ANS15 */
char card_acceptor_name_location[41];
/* 43 CARD_ACCEPTOR_NAME_LOCATION ANS40 */
char additional_response_data[26];
/* 44 ADDITIONAL_RESPONSE_DATA ANS..25(LLVAR) */
char broadcasted_message[1000];
/* 48 BROADCASTED_MESSAGE ANS...999 */
char currency_code_of_transaction[4];
/* 49 CURRENCY_CODE_OF_TRANSACTION AN3 */
char currency_code_of_settlement[4];
/* 50 CURRENCY_CODE_OF_SETTLEMENT AN3 */
char PIN[8];
/* 52 PIN_DATA B64 */
AB8583_Security_Ctrl_Info security_ctrl_info;
/* 53 SECURITY_RELATED_CONTROL_INformATION N16
SYNC_COUNTER N8
密钥同步计数器
RESERVED N7
KEY_TYPE N1
1 用于交换中心和成员行机构之间的PIN加密解密
2 用于交换中心和成员行机构之间的MAC计算
3 用于成员行和终端之间的PIN加密解密 */
AB8583_Balance_Amount balance_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 */
char second_account_number[20];
/* 55 SECOND_ACCOUNT_NUMBER N...19(LLVAR) */
AB8583_Message_Indicator message_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_Code auth_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 */
char authorizing_agent_institution_id_code[12];
/* 62 AUTHORIZING_AGENT_INSTITUTION_IDENTIFICATION_CODE N...011(LLLVAR) */
char destination_institution_id_code[12];
/* 63 DESTINATION_INSTITUTION_IDENTIFICATION_CODE N...011(LLLVAR)
64 */
char settlement_code;
/* 66 SETTLEMENT_CODE N1 */
char network_management_information_code[4];
/* 70 NETWORK_MANAGEMENT_INformATION_CODE N3 */
char date_of_action[7];
/* 73 DATE_OF_ACTION N6 */
long number_of_credits;
/* 74 NUMBER_OF_CREDITS N10 */
long reversal_number_of_credits;
/* 75 REVERSAL_NUMBER_OF_CREDITS N10 */
long number_of_debits;
/* 76 NUMBER_OF_DEBITS N10 */
long revsersal_number_of_debits;
/* 77 REVERSAL_NUMBER_OF_DEBITS N10 */
long number_of_transfer;
/* 78 NUMBER_OF_TRANSFER N10 */
long reversal_number_of_transfer;
/* 79 REVERSAL_NUMBER_OF_TRANSFER N10 */
long number_of_inquiries;
/* 80 NUMBER_OF_INQUIRIES N10 */
double processing_fee_amount_of_credits;
/* 82 PROCESSING_FEE_AMOUNT_OF_CREDITS N12 */
double processing_fee_amount_of_debits;
/* 84 PROCESSING_FEE_AMOUNT_OF_DEBITS N12 */
double amount_of_credits;
/* 86 AMOUNT_OF_CREDITS N16 */
double reversal_amount_of_credits;
/* 87 REVERSAL_AMOUNT_OF_CREDITS N16 */
double amount_of_debits;
/* 88 AMOUNT_OF_DEBITS N16 */
double reversal_amount_of_debits;
/* 89 REVERSAL_AMOUNT_OF_DEBITS N16 */
AB8583_Original_Data_Elements original_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_Amounts replacement_amounts;
/* 95 REPLACEMENT_AMOUNTS AN42 */
char message_securty_code[8];
/* 96 MESSAGE_SECURTY_CODE B64 */
doublea mount_of_net_settlement;
/* 97 AMOUNT_OF_NET_SETTLEMENT X+N16 */
char settlement_institution_id_code[12];
/* 99 SETTLEMENT_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) */
char receiveing_institution_id_code[12];
/* 100 RECEIVEING_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) */
char sender_institution_id_code[12];
/* 120 SENDER_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) */
long sender_reference_number;
/* 121 SENDER_REFERENCE_NUMBER AN12 */
char MAC[8];
/* 128 MESSAGE_AUTHENTICATION_CODE B64 */
}
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 01 */ {0,"BIT MAP,EXTENDED", 8, 0, 0, 2, NULL,0},
/* FLD 02 */ {0,"PRIMARY ACCOUNT NUMBER", 22, 0, 2, 0, NULL,0},
/* FLD 03 */ {0,"PROCESSING CODE", 6, 0, 0, 0, NULL,0},
/* FLD 04 */ {0,"AMOUNT, TRANSACTION", 12, 0, 0, 1, NULL,0},
/* FLD 05 */ {0,"NO USE", 12, 0, 0, 0, NULL,0},
/* FLD 06 */ {0,"NO USE", 12, 0, 0, 0, NULL,0},
/* FLD 07 */ {0,"TRANSACTION DATE AND TIME", 10, 0, 0, 0, NULL,0},
/* FLD 08 */ {0,"NO USE", 8, 0, 0, 0, NULL,0},
/* FLD 09 */ {0,"NO USE", 8, 0, 0, 0, NULL,0},
/* FLD 10 */ {0,"NO USE", 8, 0, 0, 0, NULL,0},
/* FLD 11 */ {0,"SYSTEM TRACE AUDIT NUMBER", 6, 0, 0, 1, NULL,0},
/* FLD 12 */ {0,"TIME, LOCAL TRANSACTION", 6, 0, 0, 0, NULL,0},
/* FLD 13 */ {0,"DATE, LOCAL TRANSACTION", 4, 0, 0, 0, NULL,0},
/* FLD 14 */ {0,"DATE, EXPIRATION", 4, 0, 0, 0, NULL,0},
/* FLD 15 */ {0,"DATE, SETTLEMENT", 4, 0, 0, 0, NULL,0},
/* FLD 16 */ {0,"NO USE", 4, 0, 0, 0, NULL,0},
/* FLD 17 */ {0,"DATE, CAPTURE", 4, 0, 0, 0, NULL,0},
/* FLD 18 */ {0,"MERCHANT'S TYPE", 4, 0, 0, 0, NULL,0},
/* FLD 19 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 20 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 21 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 22 */ {0,"POINT OF SERVICE ENTRY MODE", 3, 0, 0, 0, NULL,0},
/* FLD 23 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 24 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 25 */ {0,"POINT OF SERVICE CONDITION CODE", 2, 0, 0, 0, NULL,0},
/* FLD 26 */ {0,"NO USE", 2, 0, 0, 0, NULL,0},
/* FLD 27 */ {0,"NO USE", 1, 0, 0, 0, NULL,0},
/* FLD 28 */ {0,"field27", 6, 0, 0, 0, NULL,0},
/* FLD 29 */ {0,"NO USE", 8, 0, 1, 0, NULL,0},
/* FLD 30 */ {0,"NO USE", 8, 0, 1, 0, NULL,0},
/* FLD 31 */ {0,"NO USE", 8, 0, 1, 0, NULL,0},
/* FLD 32 */ {0,"ACQUIRER INSTITUTION ID. CODE", 11, 0, 2, 0, NULL,0},
/* FLD 33 */ {0,"FORWARDING INSTITUTION ID. CODE", 11, 0, 2, 0, NULL,0},
/* FLD 34 */ {0,"NO USE", 28, 0, 2, 0, NULL,0},
/* FLD 35 */ {0,"TRACK 2 DATA", 37, 0, 2, 0, NULL,0},
/* FLD 36 */ {0,"TRACK 3 DATA",104, 0, 3, 0, NULL,0},
/* FLD 37 */ {0,"RETRIEVAL REFERENCE NUMBER", 12, 0, 0, 0, NULL,0},
/* FLD 38 */ {0,"AUTH. IDENTIFICATION RESPONSE", 6, 0, 0, 0, NULL,0},
/* FLD 39 */ {0,"RESPONSE CODE", 2, 0, 0, 0, NULL,0},
/* FLD 40 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 41 */ {0,"CARD ACCEPTOR TERMINAL ID.", 8, 0, 0, 0, NULL,0},
/* FLD 42 */ {0,"CARD ACCEPTOR IDENTIFICATION CODE", 15, 0, 0, 0, NULL,0},
/* FLD 43 */ {0,"CARD ACCEPTOR NAME LOCATION", 40, 0, 0, 0, NULL,0},
/* FLD 44 */ {0,"ADDITIONAL RESPONSE DATA", 25, 0, 2, 0, NULL,0},
/* FLD 45 */ {0,"NO USE", 76, 0, 2, 0, NULL,0},
/* FLD 46 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 47 */ {0,"field47", 999, 0, 3, 0, NULL,0},
/* FLD 48 */ {0,"ADDITIONAL DATA --- PRIVATE", 999, 0, 3, 0, NULL,0},
/* FLD 49 */ {0,"CURRENCY CODE,TRANSACTION", 3, 0, 0, 0, NULL,0},
/* FLD 50 */ {0,"CURRENCY CODE,SETTLEMENT", 3, 0, 0, 0, NULL,0},
/* FLD 51 */ {0,"NO USE", 3, 0, 0, 0, NULL,0},
/* FLD 52 */ {0,"PERSONAL IDENTIFICATION NUMBER DATA", 8, 0, 0, 2, NULL,0},
/* FLD 53 */ {0,"SECURITY RELATED CONTROL INformATION", 16, 0, 0, 0, NULL,0},
/* FLD 54 */ {0,"ADDITIONAL AMOUNTS",120, 0, 3, 0, NULL,0},
/* FLD 55 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 56 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 57 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 58 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 59 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 60 */ {0,"NO USE", 5, 0, 3, 0, NULL,0},
/* FLD 61 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 62 */ {0,"NO USE", 11, 0, 3, 0, NULL,0},
/* FLD 63 */ {0,"NO USE", 11, 0, 3, 0, NULL,0},
/* FLD 64 */ {0,"MESSAGE AUTHENTICATION CODE FIELD", 8, 0, 0, 2, NULL,0},
/* FLD 65 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 66 */ {0,"NO USE", 1, 0, 0, 0, NULL,0},
/* FLD 67 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 68 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 69 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 70 */ {0,"SYSTEM MANAGEMENT INformATION CODE", 3, 0, 0, 0, NULL,0},
/* FLD 71 */ {0,"NO USE", 999, 0, 3, 0, NULL,0},
/* FLD 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的计算。
1位图域名
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数据域的数据包需使用此域。
typedef struct
{
long sync_counter;
char keytype;
} AB8583_Security_Ctrl_Info;
typedef struct
{
char length[4];
struct
{
char account_type[3];
char amount_type[3];
char currency_code[4];
double amount;
} ledger_balance_amount;
struct
{
char account_type[3];
char amount_type[3];
char currency_code[4];
double amount;
} available_balance_amount;
} AB8583_Balance_Amount;
typedef struct
{
char encryption_key_used;
char mac_key_used;
char message_effect;
char no_of_unlogged_txns;
} AB8583_Message_Indicator;
typedef struct
{
char auth_function_code;
char auth_mode;
char auth_id_response_code[7];
char service_business_code[5];
char invoice_number[11];
} AB8583_Auth_Operation_Code;
typedef struct
{
char org_message_type[5];
char org_system_trace_number[7];
char org_transaction_date_time[11];
char org_acqr_inst_id_code[12];
char ora_forw_inst_id_code[12];
} AB8583_Original_Data_Elements;
typedef struct
{
double actual_amount_of_transaction;
double actual_amount_of_settlement;
double actual_amount_of_transaction_fee;
double actual_amount_of_settlement_fee;
} AB8583_Replacement_Amounts;
BIT DATA_NAME TYPE
typedef struct
{
char message_type[5];
/***
MESSAGE_TYPE_IDENTIFICATION N4
0100 授权类请求消息(授权,撤消授权,余额查询)
0110 授权类应答消息(授权,撤消授权,余额查询)
0200 金融类请求消息(取款,存款,消费,退款)
0210 金融类应答消息(取款,存款,消费,退款)
0420 冲正类报告消息(取款,存款,消费,退款,授权)
0430 冲正类应答消息(取款,存款,消费,退款,授权)
0524 对帐类报告消息(ATM结算对帐,POS结算对帐)
0534 对帐类应答消息(ATM结算对帐,POS结算对帐)
0800 网络业务管理类请求消息(重置密钥)
0810 网络业务管理类应答消息(重置密钥)
0820 网络业务管理类报告消息(状态设置,广播通知,申请重置密钥)
0830 网络业务管理类应答消息(状态设置,广播通知,申请重置密钥)
****/
char primary_account_number[20];
/* 2 PRIMARY_ACCOUNT_NUMBER N...19(LLVAR) */
char processing_code[7];
/* 3 PROCESSING_CODE N6 */
double amount_of_transactions;
/* 4 AMOUNT_OF_TRANSACTIONS N12 */
double amount_of_settlement;
/* 5 AMOUNT_OF_SETTLEMENT N12 */
char transmission_date_and_time[11];
/* 7 TRANSMISSION_DATE_AND_TIME N10 */
long system_trace_audit_number;
/* 11 SYSTEM_TRACE_AUDIT_NUMBER N6 */
char time_of_local_transaction[7];
/* 12 TIME_OF_LOCAL_TRANSACTION N6 */
char date_of_local_transaction[5];
/* 13 DATE_OF_LOCAL_TRANSACTION N4 */
char date_of_settlement[5];
/* 15 DATE_OF_SETTLEMENT N4 */
char date_of_capture[5];
/* 17 DATE_OF_CAPTURE N4 */
char business_type[4];
/* 18 BUSINESS_TYPE AN3 */
char point_of_service_entry_mode[4];
/* 22 POINT_OF_SERVICE_ENTRY_MODE N3 */
char point_of_service_PIN_capture_code[3];
/* 26 POINT_OF_SERVICE_PIN_CAPTURE_CODE N2 */
double fee_of_transaction;
/* 28 FEE_OF_TRANSACTION N8 */
double fee_of_settlement;
/* 29 FEE_OF_SETTLEMENT X+N8 */
char acquiring_institution_id_code[12];
/* 32 ACQUIRING_INSTITUTION_IDENTIFICATION_CODE N..11(LLVAR) */
char forwarding_institution_id_code[12];
/* 33 FORWARDING_INSTITUTION_IDENTIFICATION_CODE N..11(LLVAR) */
char track_2_data[38];
/* 35 TRACK_2_DATA Z...37(LLVAR) */
char track_3_data[105];
/* 36 TRACK_3_DATA Z...104(LLLVAR) */
long retrieval_reference_number;
/* 37 RETRIEVAL_REFERENCE_NUMBER AN12 */
char auth_id_response[7];
/* 38 AUTHORIZATION_IDENTIFICATION_RESPONSE AN6 */
char response_code[3];
/* 39 RESPONSE_CODE AN2 */
char card_acceptor_terminal_id[9];
/* 41 CARD_ACCEPTOR_TERMINAL_IDENTIFICATION ANS8
前两位的定义如下:
51 ATM终端
52 银行POS
53 商户POS */
char card_acceptor_id_code[16];
/* 42 CARD_ACCEPTOR_IDENTIFICATION_CODE ANS15 */
char card_acceptor_name_location[41];
/* 43 CARD_ACCEPTOR_NAME_LOCATION ANS40 */
char additional_response_data[26];
/* 44 ADDITIONAL_RESPONSE_DATA ANS..25(LLVAR) */
char broadcasted_message[1000];
/* 48 BROADCASTED_MESSAGE ANS...999 */
char currency_code_of_transaction[4];
/* 49 CURRENCY_CODE_OF_TRANSACTION AN3 */
char currency_code_of_settlement[4];
/* 50 CURRENCY_CODE_OF_SETTLEMENT AN3 */
char PIN[8];
/* 52 PIN_DATA B64 */
AB8583_Security_Ctrl_Info security_ctrl_info;
/* 53 SECURITY_RELATED_CONTROL_INformATION N16
SYNC_COUNTER N8
密钥同步计数器
RESERVED N7
KEY_TYPE N1
1 用于交换中心和成员行机构之间的PIN加密解密
2 用于交换中心和成员行机构之间的MAC计算
3 用于成员行和终端之间的PIN加密解密 */
AB8583_Balance_Amount balance_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 */
char second_account_number[20];
/* 55 SECOND_ACCOUNT_NUMBER N...19(LLVAR) */
AB8583_Message_Indicator message_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_Code auth_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 */
char authorizing_agent_institution_id_code[12];
/* 62 AUTHORIZING_AGENT_INSTITUTION_IDENTIFICATION_CODE N...011(LLLVAR) */
char destination_institution_id_code[12];
/* 63 DESTINATION_INSTITUTION_IDENTIFICATION_CODE N...011(LLLVAR)
64 */
char settlement_code;
/* 66 SETTLEMENT_CODE N1 */
char network_management_information_code[4];
/* 70 NETWORK_MANAGEMENT_INformATION_CODE N3 */
char date_of_action[7];
/* 73 DATE_OF_ACTION N6 */
long number_of_credits;
/* 74 NUMBER_OF_CREDITS N10 */
long reversal_number_of_credits;
/* 75 REVERSAL_NUMBER_OF_CREDITS N10 */
long number_of_debits;
/* 76 NUMBER_OF_DEBITS N10 */
long revsersal_number_of_debits;
/* 77 REVERSAL_NUMBER_OF_DEBITS N10 */
long number_of_transfer;
/* 78 NUMBER_OF_TRANSFER N10 */
long reversal_number_of_transfer;
/* 79 REVERSAL_NUMBER_OF_TRANSFER N10 */
long number_of_inquiries;
/* 80 NUMBER_OF_INQUIRIES N10 */
double processing_fee_amount_of_credits;
/* 82 PROCESSING_FEE_AMOUNT_OF_CREDITS N12 */
double processing_fee_amount_of_debits;
/* 84 PROCESSING_FEE_AMOUNT_OF_DEBITS N12 */
double amount_of_credits;
/* 86 AMOUNT_OF_CREDITS N16 */
double reversal_amount_of_credits;
/* 87 REVERSAL_AMOUNT_OF_CREDITS N16 */
double amount_of_debits;
/* 88 AMOUNT_OF_DEBITS N16 */
double reversal_amount_of_debits;
/* 89 REVERSAL_AMOUNT_OF_DEBITS N16 */
AB8583_Original_Data_Elements original_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_Amounts replacement_amounts;
/* 95 REPLACEMENT_AMOUNTS AN42 */
char message_securty_code[8];
/* 96 MESSAGE_SECURTY_CODE B64 */
doublea mount_of_net_settlement;
/* 97 AMOUNT_OF_NET_SETTLEMENT X+N16 */
char settlement_institution_id_code[12];
/* 99 SETTLEMENT_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) */
char receiveing_institution_id_code[12];
/* 100 RECEIVEING_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) */
char sender_institution_id_code[12];
/* 120 SENDER_INSTITUTION_IDENTIFICATION_CODE N...11(LLVAR) */
long sender_reference_number;
/* 121 SENDER_REFERENCE_NUMBER AN12 */
char MAC[8];
/* 128 MESSAGE_AUTHENTICATION_CODE B64 */
}
相关推荐
在实际应用中,理解并实施ISO8583规范对于开发银行系统、支付网关、ATM网络或者任何涉及金融交易的软件都是必要的。开发者需要熟悉如何处理不同类型的交易请求,如何处理错误和异常,以及如何确保数据的安全性和完整...
ISO8583规范是一种广泛应用于金融交易系统中的报文标准,主要用于银行间的数据交换,如银行卡支付、转账等业务。这个规范定义了各种金融交易的结构和编码规则,使得不同金融机构之间的通信变得标准化和可互操作。在...
ISO8583协议是电子支付领域的一个国际标准,它定义了金融交易数据在不同系统之间交换的格式。这个协议自1987年首次发布以来,已经成为银行卡交易处理的核心,广泛应用于ATM、POS终端、网上银行以及移动支付等多种...
2. **消息构建**:允许开发者根据业务需求,创建符合ISO8583规范的消息结构,然后转换为二进制格式发送。 3. **字段编码与解码**:库内置了对不同数据类型的编码和解码规则,如数值、字符串、日期时间等,确保数据...
接下来,根据字段编号查找ISO8583规范,了解每个字段的具体含义和格式。例如,假设Field 2为交易金额字段,Field 65为商户ID字段,Field 66为终端ID字段。 1. **交易金额(Field 2)**:假设为固定长度字段,长度为...
在发送ISO8583报文时,需要根据业务需求填充各个字段,然后按照ISO8583规范编码并生成报文。编码过程需要确保所有字段都符合其编码规则,例如,对数值字段进行BCD编码,对字符串进行截断或填充。 7. ATM和金融交易...
ISO8583接口规范 ISO8583是一种国际标准的金融行业消息传输协议,用于定义金融机构之间的消息交换格式。该协议于1987年由国际标准化组织(ISO)发布,旨在标准化金融行业的消息传输格式,使得不同金融机构之间的...
ISO 8583标准的设计目标是提供一个灵活的界面规范,以支持不同系统间的信息交换,同时保持应用规范的私密性。尽管各系统可以自行决定信息格式,但它们必须确保数据元素的格式符合ISO 8583的定义,以便跨系统兼容和互...
这包括计算Bitmap、编码特殊数据类型、以及按照ISO8583规范的顺序组织报文字段。 4. 错误处理:在处理ISO8583报文时,可能会遇到各种错误,如格式错误、校验和失败等。因此,库中应包含相应的错误处理机制,以便在...
在深入了解ISO8583标准之前,我们先来了解一下“标准”与“规范”的定义及其区别。国际标准化组织(ISO)对这两个概念进行了明确区分: 1. **标准**:由认可机构批准的一份文档,为产品、过程或服务提供了用于通用...
该工具能够解析并生成符合ISO8583-1987规范的报文,这意味着它理解并遵循了该标准中定义的字段结构、编码规则和数据类型。 在ISO8583-1987版中,报文被划分为多个域,每个域都有特定的含义和编码方式。例如,MTI...
支付,金融iso8583报文mac计算、pin计算
ISO8583是金融行业中广泛使用的报文标准,用于在银行系统间交换交易信息,如ATM取款、信用卡支付等。这个标准定义了一种结构化的消息格式,以确保不同金融机构之间的数据交换准确无误。现在我们来深入探讨ISO8583...
ISO8583协议是金融业广泛使用的报文传输标准,主要用于银行卡交易和其他金融交易的通信。这个协议定义了数据元素的结构和格式,确保不同金融机构之间的数据交换具有标准化和可互操作性。在Java环境中实现ISO8583协议...
《深入解析ISO8583库:dl_c_iso8583_v0_0_2_030907_allfiles》 ISO8583是金融行业中...通过深入研究这个库,不仅可以掌握ISO8583的规范,还能了解如何在实际项目中高效地处理这些报文,从而提升系统的稳定性和效率。
2. `config`包:提供配置功能,允许用户自定义ISO8583消息字段的类型和长度,以适应不同版本或定制的ISO8583规范。 3. 示例代码:展示如何使用库进行消息的创建、解析和调试。 4. 测试用例:确保库的正确性和稳定性...