日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

8583协议深入理解 1

發(fā)布時間:2024/3/13 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8583协议深入理解 1 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.


深入理解8583協(xié)議

最初,金融系統(tǒng)只有IBM這些大公司來提供設(shè)備,象各種主機(jī)與終端等,后來有很多大大小小的公司進(jìn)入,怎樣設(shè)計(jì)一個報(bào)文協(xié)議,解決各公司金融系統(tǒng)之間的報(bào)文交換,暫且稱該協(xié)議叫做ISO8583協(xié)議。例如‘回頭客會員管理系統(tǒng)’POS機(jī)上應(yīng)用的就是8583報(bào)文。

金融行業(yè)涉及到的數(shù)據(jù)內(nèi)容是比較少的,如交易類型、帳號、帳戶類型、密碼、交易金額、交易手續(xù)費(fèi)、日期時間、商戶代碼、2磁3磁數(shù)據(jù)、交易序列號等,都總結(jié)起來不過100個左右的數(shù)據(jù)。我們可以簡單的設(shè)計(jì)ISO8583,定義128個字段,將所有金融數(shù)據(jù)字段按照順序排列,分別對應(yīng)128個字段。每個數(shù)據(jù)類型占固定的長度,要發(fā)送一個報(bào)文時,就將128個字段按照順序連起來,然后將整串?dāng)?shù)據(jù)包發(fā)送出去。

任何金融軟件收到ISO8583包后,直接按照我們定義的規(guī)范解包即可,因?yàn)檎麄€報(bào)文的128個字段都預(yù)先定義好了。比如第1個字段是“交易類型”,長度為4位,第2個字段位是“帳號”,為19位等等。接收方就可以先取4位,再取接著的19位,依次類推,直到整個數(shù)據(jù)包128個字段都解完為止。
????? 不過我們有幾個問題要思考下:
1、 我怎么知道每個字段的數(shù)據(jù)類型呢,是數(shù)字還是字符?
2、 每個傳送的報(bào)文都把128個字段都傳過去,有時候我可能只需要其中5個字段。
3、 如果我某些字段的長度不固定,屬于變長怎么辦。
??? 第一個問題。我在定義ISO8583時除了定義每個字段表示什么,還規(guī)定其內(nèi)容是數(shù)字或是字符等類型。可能出現(xiàn)的類型有以下幾種:字母、數(shù)字、特殊字符、年月日等時間、二進(jìn)制數(shù)據(jù)。比如“商戶類型”字段定義其長度是15,類型為字母。如果“商戶類型”同時包括數(shù)字和字母呢?那我們就定義一個字段可以同時屬于多個類型。
??? 第二個問題。其本質(zhì)就是如果我只傳128個字段的5個字段,接收方怎么知道我傳了哪幾個字段。我在報(bào)文前面加上個包頭,用16個字節(jié),即128個bit來表示128個字段中的某個字段是否存在。每個bit如果是1就表示對應(yīng)的字段在本次報(bào)文中存在,如果是0就是不存在。比如,我要發(fā)送5個字段,分別屬于128個字段中的第2、3、6、8、9字段,我就可以將128bit的報(bào)文頭填成011001011000000000………0。
???? 我們把這16個字節(jié)稱為bit map,即位圖,用來表示某個位是否存在。考慮到很多時候報(bào)文不需要128個字段,可以將報(bào)文頭由128bit減到64bit,把ISO8583的128個字段中最常見的都放到前64個字段中,只有在需要的時候才把剩下的64bit放到報(bào)文里面?

我把64bit報(bào)文頭的第一位bit用來代表特殊含義,如果該bit為1,則表示64bit后面跟了剩下的64bit報(bào)文頭;如果第一位bit為0,則表示64bit后面直接是數(shù)據(jù)字段內(nèi)容。因?yàn)閳?bào)文頭第二個64bit屬于有時候有,所以我們叫它Extended bit map擴(kuò)展位圖,報(bào)文頭最開始的64bit我們叫它Primary bit map主位圖。我們直接把擴(kuò)展位圖固定放到128個字段的第一個字段,而主位圖每個數(shù)據(jù)包都有,就強(qiáng)制性放在所有128個字段的前面。
??? 第三個問題。比如第2個字段是“帳號”,是不定長的,可能有的銀行帳號是19位,有的是17位等,在字段的開頭加上“帳號”的長度。比如帳號是0123456789,一共10位,我們變成100123456789,接收方收到該字段后,它知道ISO8583規(guī)定第2個字段“帳號”是變長的,會先取前面2位出來,然后根據(jù)長度獲取帳號。在規(guī)范里面定義某個字段的屬性是“LLVAR”,其中LL表示長度,VAR表示數(shù)據(jù),兩個LL表示兩位長,最大是99,三位就是“LLLVAR”,最大是999。

另外考慮到有些人有特殊的要求,我們將128個字段中的部分定義為自定義字段,算是一種擴(kuò)展。

?

字段域的定義

  typedef struct ISO8583

  {

  int bit_flag; /*域數(shù)據(jù)類型0 -- string, 1 -- int, 2 -- binary*/

  char *data_name; /*域名*/

  int length; /*數(shù)據(jù)域長度*/

  int length_in_byte;/*實(shí)際長度(如果是變長)*/

  int variable_flag; /*是否變長標(biāo)志0:否 2:2位變長, 3:3位變長*/

  int datatyp; /*0 -- string, 1 -- int, 2 -- binary*/

  char *data; /*存放具體值*/

  int attribute; /*保留*/

  } ISO8583;

  ISO8583 Tbl8583[128] =

  {

  /* FLD 1 */ {0,"BIT MAP,EXTENDED ", 8, 0, 0, 2, NULL,0},

  /* FLD 2 */ {0,"PRIMARY ACCOUNT NUMBER ", 22, 0, 2, 0, NULL,0},

  /* FLD 3 */ {0,"PROCESSING CODE ", 6, 0, 0, 0, NULL,0},

  /* FLD 4 */ {0,"AMOUNT, TRANSACTION ", 12, 0, 0, 1, NULL,0},

  /* FLD 5 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},

  /* FLD 6 */ {0,"NO USE ", 12, 0, 0, 0, NULL,0},

  /* FLD 7 */ {0,"TRANSACTION DATE AND TIME ", 10, 0, 0, 0, NULL,0},

  /* FLD 8 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},

  /* FLD 9 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},

  /* FLD 10 */ {0,"NO USE ", 8, 0, 0, 0, NULL,0},

  /* FLD 11 */ {0,"SYSTEM TRACE AUDIT NUMBER ", 6, 0, 0, 1, NULL,0},

  /* FLD 12 */ {0,"TIME, LOCAL TRANSACTION ", 6, 0, 0, 0, NULL,0},

  /* FLD 13 */ {0,"DATE, LOCAL TRANSACTION ", 4, 0, 0, 0, NULL,0},

  /* FLD 14 */ {0,"DATE, EXPIRATION ", 4, 0, 0, 0, NULL,0},

  /* FLD 15 */ {0,"DATE, SETTLEMENT ", 4, 0, 0, 0, NULL,0},

  /* FLD 16 */ {0,"NO USE ", 4, 0, 0, 0, NULL,0},

  /* FLD 17 */ {0,"DATE, CAPTURE ", 4, 0, 0, 0, NULL,0},

  /* FLD 18 */ {0,"MERCHANT'S TYPE ", 4, 0, 0, 0, NULL,0},

??? //省略部分參考規(guī)范文檔。

  /* 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}

  };

  如第二域:域名為主帳號,

  數(shù)據(jù)類型為string

  長度為22(最長長度不得超過此數(shù))

  是個2位變長域

  在打包時需在數(shù)據(jù)域前加上數(shù)據(jù)的實(shí)際長度,如‘19數(shù)據(jù)值’(即19為長度)

  如第三域:域名為處理碼,

  數(shù)據(jù)類型為string

  長度為6

  是個定長域 必須填滿6位。

1,信息類型(message type)定義

位圖位置:-

格式:定長

類型:N4

描述:

數(shù)據(jù)包的第一部分,定義數(shù)據(jù)包的類型。

數(shù)據(jù)類型由數(shù)據(jù)包的發(fā)起者設(shè)定,應(yīng)遵循以下要求:

數(shù)據(jù)包開始部分必須是信息類型;

對不支持的信息類型能給出拒絕應(yīng)答。

0100授權(quán)交易

0110授權(quán)交易答復(fù)

0200金融交易

0210金融交易答復(fù)

0240查詢交易

0250查詢交易答復(fù)

0400沖正交易

0410沖正交易答復(fù)

0800管理交易

0810管理交易答復(fù)

?

2,位圖(Bit Map) - 基本位圖和擴(kuò)展位圖

位圖位置:1

格式:定長

類型:B16

描述:

如將位圖的第一位設(shè)為'1',表示使用擴(kuò)展位圖,否則表示只使用基本位圖。

如使用某數(shù)據(jù)域,應(yīng)在位圖中將相應(yīng)的位設(shè)位'1',如使用41域,需將位圖的41位設(shè)為'1'。

選用條件:如使用65到128域,需設(shè)位圖域?yàn)?#39;1'

?

3,Bit02主帳號(Primary Account Number )

位圖位置:02

格式:變長,LLVAR

類型:N..22

描述:

唯一的確認(rèn)一個用戶交易的基本帳號。

由于銀行電子服務(wù)系統(tǒng)涉及多個應(yīng)用系統(tǒng),而帳號長度最多為22位,故將原標(biāo)準(zhǔn)的19長度改為22位。

?

Bit03 處理代碼 (Processing Code )

位圖位置:03

格式:定長

類型:N6

描述:用于描述交易對客戶帳戶造成何種影響的代碼。

處理代碼和信息碼一起可唯一定義一種交易的類型。

處理代碼由以下三部分組成:

位置描述

1-2交易動作碼

3-4付出帳戶類型,用于借記類,如查詢、代收費(fèi)、轉(zhuǎn)場交易。

5-6收入帳戶類型,用于代收費(fèi)、轉(zhuǎn)帳等。

其中:

ff : 付出帳戶

tt: 收入帳戶

* 視主機(jī)而定

?

5,Bit04 交易金額 (Amount, Transaction)

位圖位置:04

格式:定長

類型:N12

描述:帳戶人要求交易的交易金額,不含任何處理和交易費(fèi)用。

金額的表示和貨幣代碼有關(guān),應(yīng)能表示相應(yīng)貨幣的最小單位。參ISO4217有關(guān)貨幣代碼定義。

如“000000000100”用于表示美元,表示1.00元;如用于表示意大利貨幣,則表示100里拉。

對于查詢等交易,應(yīng)設(shè)交易金額為“000000000000”。

?

6,Bit07交易日期和時間Transmission Date and Time

位圖位置:07

格式:定長,MMDDhhmmss

類型:N10

描述:本地交易日期和時間

?

7,Bit11系統(tǒng)跟蹤號(Systems Trace Audit Number)

位圖位置:11

格式:定長

類型:N6

描述:終端交易的跟蹤號碼。

交易發(fā)起終端填寫,和“交易日期、時間”、信息類型等合在一起可唯一定義某一個終端的唯一一筆交易。即是說,在同一天,對一終端,同一類交易的系統(tǒng)跟蹤號應(yīng)保證不同。系統(tǒng)跟蹤號在交易過程中不能修改。使用此域來匹配請求和通知類交易的返回。

應(yīng)用系統(tǒng)使用此域來檢查收到的授權(quán)、金融、自動沖正、結(jié)算、管理和網(wǎng)管等類交易的應(yīng)答包是否是其請求包的應(yīng)答。

系統(tǒng)跟蹤號不用于匹配自動沖正交易,也不用于在預(yù)授權(quán)消費(fèi)時匹配前面的預(yù)授權(quán)交易。參90域。

對于銀行電子服務(wù)系統(tǒng),其系統(tǒng)跟蹤號是交易流水號。

?

8,Bit12本地交易時間(Time ,Local Transaction)

位圖位置:12

格式:定長,hhmmss

類型:N6

描述:交易在終端上發(fā)生的時間。

本地交易時間在交易處理過程中不能改變。在自動沖正,存貯轉(zhuǎn)發(fā)時,本地交易時間不能改變。

?

9,Bit13本地交易日期(Date ,Local Transaction)

位圖位置:13

格式:定長,MMDD

類型:N4

描述:交易在終端上發(fā)生的時間。

本地交易時間不能改變,在自動沖正、存儲轉(zhuǎn)發(fā)交易時,本地交易時間也不能改變。

?

10,Bit14有效期(Date ,Expiration)

位圖位置:14

格式:定長,YYMM

類型:N4

描述:卡的有效期,年年月月

由于卡類寫磁格式不同,收單行可能提不出卡的有效期,授權(quán)機(jī)構(gòu)從卡的二磁道中提取卡的有效期。如卡,無二磁道,收單行應(yīng)要求手工錄入卡的有效期。

選用條件:100、200、400等交易如沒有2、3磁道時,一定要有此域。

?

11,Bit15結(jié)算日期(Date ,Settlement)

位圖位置:15

格式:定長,MMDD

類型:N4

描述:

銀行電子服務(wù)系統(tǒng)和主機(jī)結(jié)算的時間,格式月月日日。

結(jié)帳日期前發(fā)生的交易參加當(dāng)天結(jié)算。

在結(jié)算時,結(jié)帳日期也用于計(jì)算處理、交易費(fèi)用。

?

12,Bit17獲取日期(Date ,Capture)

位圖位置:17

格式:定長,MMDD

類型:N4

描述:從主機(jī)獲取交易的記帳日期。通常用于主機(jī)和商戶清算。

?

13,Bit18商戶類型(Merchant's Type)

位圖位置:18

格式:定長

類型:N4

描述:定義商戶產(chǎn)品和服務(wù)類型的代碼

商戶類型用于金融、授權(quán)交易,用于指定服務(wù)點(diǎn)的類型。它主要有以下用途:

決定預(yù)授權(quán)交易得到確認(rèn)的最長時間;

控制合法限額;

為交易授權(quán)處理,控制網(wǎng)絡(luò)操作規(guī)則;

欺詐檢測;

用于商戶分類報(bào)表;

交易費(fèi)用處理。

根據(jù)ISO8583標(biāo)準(zhǔn),應(yīng)使用相應(yīng)的國家標(biāo)準(zhǔn)。

商戶類型代碼表如下:

商戶類型代碼行業(yè)類型說明

4215郵遞服務(wù)

4511民航

4722旅游

4782過橋費(fèi)

4789其他運(yùn)輸服務(wù)

4614電信服務(wù)

5542加油站

5812餐館

5999購物

6010金融機(jī)構(gòu)-人工現(xiàn)金支付

6011金融機(jī)構(gòu)-自動現(xiàn)金支付

6012金融機(jī)構(gòu)-各類服務(wù)

7011酒店、旅館

7299各類個人服務(wù):洗衣、美容、

7399各類商業(yè)服務(wù):停車場、租車、廣告、其他服務(wù)

7699各類維修服務(wù):維修、洗車、拖車

7996娛樂:電影、劇院、體育、游戲

8099醫(yī)療服務(wù)

8111法律服務(wù)

8999各類專業(yè)服務(wù):會計(jì)、教育、裝修、工程

選用條件:服務(wù)點(diǎn)終端發(fā)起的交易一定要有此域。

?

14,Bit22服務(wù)點(diǎn)輸入方式(Point-of-Service Entry Mode)

位圖位置:22

格式:定長

類型:N3

描述:在服務(wù)終端上定義PIN和PAN的輸入方式。

服務(wù)點(diǎn)輸入方式包含以下兩個方面組合而成:

位置描述

1-2在服務(wù)終端上PAN有效期輸入方式

3-3在服務(wù)終端上PIN的輸入方式

PAN的輸入方式編碼如下:

PAN輸入方式描述

00不知

01手工

02讀磁卡

03條碼掃描儀(BAR)

04光學(xué)符號閱讀器(OCR)

05集成電路卡(IC卡)

PIN的輸入方式編碼如下:

PIN輸入方式描述

0不知

1終端能接收PIN

2終端不能接收PIN

選用條件:服務(wù)點(diǎn)終端發(fā)起的交易一定要有此域。

?

15,Bit25服務(wù)點(diǎn)條件代碼(Point-of-Service Condition Code)

位圖位置:25

格式:定長

類型:N2

描述:定義交易發(fā)生的服務(wù)點(diǎn)類型

用法說明:下面是CYBERBANK支持的服務(wù)點(diǎn)條件代碼。

服務(wù)點(diǎn)條件代碼服務(wù)點(diǎn)終端類型

2自動柜員機(jī)(ATM)

10銀行終端(10)

14POS

20電話銀行

?

16,Bit32收單機(jī)構(gòu)標(biāo)識碼(Acquirer institution Identification)

位圖位置:32

格式:LLVAR

類型:N..11

描述:在金融交易中此域表示交易發(fā)生的銀行機(jī)構(gòu)的標(biāo)識碼

應(yīng)答數(shù)據(jù)包必須和請求數(shù)據(jù)包此域相同。

?

17,Bit33向前機(jī)構(gòu)標(biāo)識碼(Forwarding Institution Identification Code)

位圖位置:33

格式:LLVAR

類型:N..11

描述:在金融交易中此域表示帳戶所在的銀行機(jī)構(gòu)的標(biāo)識碼

在網(wǎng)管交易800/810中,本域含有交易發(fā)起機(jī)構(gòu)的代碼。

應(yīng)答數(shù)據(jù)包必須和請求數(shù)據(jù)包此域相同。

?

18,Bit35二磁道數(shù)據(jù)(Track 2 Data)

位圖位置:35

格式:LLVAR

類型:Z..37

描述:寫在卡二磁道的數(shù)據(jù)。數(shù)據(jù)組成遵循ISO7811-1985標(biāo)準(zhǔn),數(shù)據(jù)中包含域分隔符,但不包含卡啟始、結(jié)束符、LRC等。

收卡行應(yīng)檢測卡的二磁道是否符合國際標(biāo)準(zhǔn)。

為支持國際交換收單行應(yīng)將二磁道中的分隔符換為“=”。除此外不能對二磁道數(shù)據(jù)進(jìn)行任何修改,如修改PAN的校驗(yàn)字、有效期、服務(wù)碼等。

?

19,Bit36三磁道數(shù)據(jù)(Track 3 Data)

位圖位置:36

格式:LLLVAR

類型:Z...104

描述:寫在卡三磁道的數(shù)據(jù)。數(shù)據(jù)應(yīng)組成遵循ISO4909標(biāo)準(zhǔn),數(shù)據(jù)中包含域分隔符,但不包含卡啟始、結(jié)束符、LRC等。

注意:長度說明為3位數(shù)字長。

?

20,Bit37檢索索引號(Retrieval Reference Number)

位圖位置:37

格式:定長

類型:AN12

描述:檢索索引號用來在任何時間標(biāo)識一個金融、授權(quán)、自動沖正交易。

檢索索引號不要求打印在持卡人的帳單上。它的主要目的是在收單行和授權(quán)行之間定義一個數(shù)據(jù)項(xiàng)用于跟蹤和檢索交易。授權(quán)機(jī)構(gòu)可以將檢索索引號打印在客戶的對帳單上。

檢索索引號由收單行分配。

選用條件:可包含在收單機(jī)構(gòu)的交易請求中。如在交易請求中有,則應(yīng)答數(shù)據(jù)中一定應(yīng)原樣返回。

?

21,Bit38授權(quán)碼(Authorization Identification)

位圖位置:38

格式:定長

類型:AN6

描述:交易授權(quán)機(jī)構(gòu)返回的返回代碼。

授權(quán)碼用于在服務(wù)點(diǎn)終端上信用卡授權(quán);

授權(quán)機(jī)構(gòu)按網(wǎng)絡(luò)操作規(guī)定,可選使用本域。

?

22,Bit39返回碼(Response Code)

位圖位置:39

格式:定長

類型:AN2

描述:對一交易定義其處理結(jié)果的編碼。

返回碼用于說明授權(quán)機(jī)構(gòu)對金融(授權(quán))交易的處理狀態(tài);也用來指明自動沖正交易的沖正原因;還用來指出目標(biāo)主機(jī)已接收到文件修改、結(jié)算、管理、網(wǎng)管等交易請求。

返回碼應(yīng)盡可能準(zhǔn)確,應(yīng)盡可能描述清楚所遇到的問題和狀態(tài)。網(wǎng)絡(luò)交換主機(jī)、收單行主機(jī)有可能會按不同的返回碼收取不同的交易處理費(fèi)用,并執(zhí)行不同的處理過程。

?

?

23,Bit41收卡單位終端標(biāo)識碼(Card Acceptor Terminal Identification)

位圖位置:41

格式:定長

類型:ANS8

描述:定義在收單單位中定義一個服務(wù)終端的標(biāo)識碼,在同一商戶中服務(wù)終端標(biāo)識碼應(yīng)唯一。

?

24,Bit42收卡商戶定義碼(Card Acceptor Identification Code)

位圖位置:42

格式:定長

類型:ANS15

描述:在本地和網(wǎng)絡(luò)中定義交易單位(商戶)的編碼。

?

25,Bit43收卡商戶位置(Card Acceptor Location)

位圖位置:43

格式:定長

類型:ANS40

描述:在本地和網(wǎng)絡(luò)中定義收卡單位(商戶)的國家、省。城市等。

選用條件:如對外卡網(wǎng)絡(luò),一定要包含此域。


本文轉(zhuǎn)自于:http://blog.csdn.net/pengzp/article/details/6548987


總結(jié)

以上是生活随笔為你收集整理的8583协议深入理解 1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。