深入理解金融交易報文Iso8583協議
前言
最初,金融系統只有IBM這些大公司來提供裝置,象各種主機與終端等,後來有很多大大小小的公司進入,怎樣設計一個報文協議,解決各公司金融系統之間的報文交換,暫且稱該協議叫做ISO8583協議。例如“回頭客會員管理系統”POS機上應用的就是8583報文。
金融行業涉及到的資料內容是比較少的,如交易型別、帳號、帳戶型別、密碼、交易金額、交易手續費、日期時間、商戶程式碼、2磁3磁資料、交易序列號等,都總結起來不過100個左右的資料。我們可以簡單的設計ISO8583,定義128個欄位,將所有金融資料欄位按照順序排列,分別對應128個欄位。每個資料型別佔固定的長度,要傳送一個報文時,就將128個欄位按照順序連起來,然後將整串資料包傳送出去。
任何金融軟體收到ISO8583包後,直接按照我們定義的規範解包即可,因為整個報文的128個欄位都預先定義好了。比如第1個欄位是“交易型別”,長度為4位,第2個欄位位是“帳號”,為19位等等。接收方就可以先取4位,再取接著的19位,依次類推,直到整個資料包128個欄位都解完為止。
思考
有幾個問題要思考下:
- 我怎麼知道每個欄位的資料型別呢,是數字還是字元?
- 每個傳送的報文都把128個欄位都傳過去,有時候我可能只需要其中5個欄位。
- 如果我某些欄位的長度不固定,屬於變長怎麼辦。
第一個問題:我在定義ISO8583時除了定義每個欄位表示什麼,還規定其內容是數字或是字元等型別。可能出現的型別有以下幾種:字母、數字、特殊字元、年月日等時間、二進位制資料。比如“商戶型別”欄位定義其長度是15,型別為字母。如果“商戶型別”同時包括數字和字母呢?那我們就定義一個欄位可以同時屬於多個型別。
第二個問題:其本質就是如果我只傳128個欄位的5個欄位,接收方怎麼知道我傳了哪幾個欄位。我在報文前面加上個包頭,用16個位元組,即128個bit來表示128個欄位中的某個欄位是否存在。每個bit如果是1就表示對應的欄位在本次報文中存在,如果是0就是不存在。比如,我要傳送5個欄位,分別屬於128個欄位中的第2、3、6、8、9欄位,我就可以將128bit的報文頭填成011001011000000000………0。
我們把這16個位元組稱為bit map,即點陣圖,用來表示某個位是否存在。考慮到很多時候報文不需要128個欄位,可以將報文頭由128bit減到64bit,把ISO8583的128個欄位中最常見的都放到前64個欄位中,只有在需要的時候才把剩下的64bit放到報文裡面?
我把64bit報文頭的第一位bit用來代表特殊含義,如果該bit為1,則表示64bit後面跟了剩下的64bit報文頭;如果第一位bit為0,則表示64bit後面直接是資料欄位內容。因為報文頭第二個64bit屬於有時候有,所以我們叫它Extended bit map擴充套件點陣圖,報文頭最開始的64bit我們叫它Primary bit map主點陣圖。我們直接把擴充套件點陣圖固定放到128個欄位的第一個欄位,而主點陣圖每個資料包都有,就強制性放在所有128個欄位的前面。
第三個問題:比如第2個欄位是“帳號”,是不定長的,可能有的銀行帳號是19位,有的是17位等,在欄位的開頭加上“帳號”的長度。比如帳號是0123456789,一共10位,我們變成100123456789,接收方收到該欄位後,它知道ISO8583規定第2個欄位“帳號”是變長的,會先取前面2位出來,然後根據長度獲取帳號。在規範裡面定義某個欄位的屬性是“LLVAR”,其中LL表示長度,VAR表示資料,兩個LL表示兩位長,最大是99,三位就是“LLLVAR”,最大是999。
另外考慮到有些人有特殊的要求,我們將128個欄位中的部分定義為自定義欄位,算是一種擴充套件。
欄位域定義
typedef struct ISO8583
{
int bit_flag; /*域資料型別0 -- string, 1 -- int, 2 -- binary*/
char *data_name; /*域名*/
int length; /*資料域長度*/
int length_in_byte; /*實際長度(如果是變長)*/
int variable_flag; /*是否變長標誌0:否 2:2位變長, 3:3位變長*/
int datatyp; /*0 -- string, 1 -- int, 2 -- binary*/
char *data; /*存放具體值*/
int attribute; /*保留*/
} ISO8583;
ISO8583 Tbl8583[128] =
{
/* FLD 1 */ { 0, "BIT MAP,EXTENDED ", 8, 0, 0, 2, NULL, 0 },
/* FLD 2 */ { 0, "PRIMARY ACCOUNT NUMBER ", 22, 0, 2, 0, NULL, 0 },
/* FLD 3 */ { 0, "PROCESSING CODE ", 6, 0, 0, 0, NULL, 0 },
/* FLD 4 */ { 0, "AMOUNT, TRANSACTION ", 12, 0, 0, 1, NULL, 0 },
/* FLD 5 */ { 0, "NO USE ", 12, 0, 0, 0, NULL, 0 },
/* FLD 6 */ { 0, "NO USE ", 12, 0, 0, 0, NULL, 0 },
/* FLD 7 */ { 0, "TRANSACTION DATE AND TIME ", 10, 0, 0, 0, NULL, 0 },
/* FLD 8 */ { 0, "NO USE ", 8, 0, 0, 0, NULL, 0 },
/* FLD 9 */ { 0, "NO USE ", 8, 0, 0, 0, NULL, 0 },
/* FLD 10 */ { 0, "NO USE ", 8, 0, 0, 0, NULL, 0 },
/* FLD 11 */ { 0, "SYSTEM TRACE AUDIT NUMBER ", 6, 0, 0, 1, NULL, 0 },
/* FLD 12 */ { 0, "TIME, LOCAL TRANSACTION ", 6, 0, 0, 0, NULL, 0 },
/* FLD 13 */ { 0, "DATE, LOCAL TRANSACTION ", 4, 0, 0, 0, NULL, 0 },
/* FLD 14 */ { 0, "DATE, EXPIRATION ", 4, 0, 0, 0, NULL, 0 },
/* FLD 15 */ { 0, "DATE, SETTLEMENT ", 4, 0, 0, 0, NULL, 0 },
/* FLD 16 */ { 0, "NO USE ", 4, 0, 0, 0, NULL, 0 },
/* FLD 17 */ { 0, "DATE, CAPTURE ", 4, 0, 0, 0, NULL, 0 },
/* FLD 18 */ { 0, "MERCHANT'S TYPE ", 4, 0, 0, 0, NULL, 0 },
/* 省略部分參考規範文件。 */
/* FLD 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 }
};
欄位域解釋
1、資訊型別(message type)
點陣圖位置 | 格式 | 型別 | 描述 |
---|---|---|---|
- | 定長 | N4 | 資料包的第一部分,定義資料包的型別。 資料型別由資料包的發起者設定,應遵循以下要求: 資料包開始部分必須是資訊型別; 對不支援的資訊型別能給出拒絕應答。 0100授權交易 0110授權交易答覆 0200金融交易 0210金融交易答覆 0240查詢交易 0250查詢交易答覆 0400衝正交易 0410衝正交易答覆 0800管理交易 0810管理交易答覆 |
2、點陣圖(Bit Map) - 基本點陣圖和擴充套件點陣圖
點陣圖位置 | 格式 | 型別 | 描述 |
---|---|---|---|
01 | 定長 | B16 | 如將點陣圖的第一位設為’1’,表示使用擴充套件點陣圖,否則表示只使用基本點陣圖。 如使用某資料域,應在點陣圖中將相應的位設位’1’,如使用41域,需將點陣圖的41位設為’1’。 選用條件:如使用65到128域,需設點陣圖域為’1’ |
3、Bit02主帳號(Primary Account Number )
點陣圖位置 | 格式 | 型別 | 描述 |
---|---|---|---|
02 | 變長,LLVAR | N..22 | 唯一的確認一個使用者交易的基本帳號。 由於銀行電子服務系統涉及多個應用系統,而帳號長度最多為22位,故將原標準的19長度改為22位。 |
4、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、Bit07交易日期和時間(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 | N..37 | 寫在卡二磁軌的資料。資料組成遵循ISO7811-1985標準,資料中包含域分隔符,但不包含卡啟始、結束符、LRC等。 收卡行應檢測卡的二磁軌是否符合國際標準。 為支援國際交換收單行應將二磁軌中的分隔符換為“=”。除此外不能對二磁軌資料進行任何修改,如修改PAN的校驗字、有效期、服務碼等。 |
19、Bit36三磁軌資料(Track 3 Data)
點陣圖位置 | 格式 | 型別 | 描述 |
---|---|---|---|
36 | LLLVAR | N..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貸記,調整(客戶修改) |
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、it89借記自動衝正交易金額(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資料域的資料包需使用此域。 |
舉個例子
現在我們有ISO8583報文如下(十六進位制表示法):
60 00 03 00 00 60 31 00 31 07 30 02 00 30 20 04 C0 20 C0 98 11 00 00 00 00 00 00 00 00 01 00 03 49 02 10 00 12 30 62 25 82 21 12 99 63 01 5D 15 11 10 10 00 00 35 36 38 35 32 33 31 34 32 33 35 32 31 34 35 32 36 38 35 39 32 33 36 31 35 36 C6 24 83 4D 36 7E 9E 9E 20 00 00 00 00 00 00 00 00 13 22 00 00 08 00 05 00 36 37 41 32 32 39 39 41
解析結果為:
Message = 0200
Bitmap = 30 20 04 C0 20 C0 98 11
Bit 3 = 000000
Bit 4 = 000000000001
Bit 11 = 000349
Bit 22 = 0210
Bit 25 = 00
Bit 26 = 12
Bit 35 = (30)62258221129963015=151110100000
Bit 41 = 56852314
Bit 42 = 235214526859236
Bit 49 = 156
Bit 52 = C6 24 83 4D 36 7E 9E 9E
Bit 53 = 2000000000000000
Bit 60 = (13)2200000800050
Bit 64 = 36 37 41 32 32 39 39 41
那麼,是如何解析的呢?
第一步
POS終端上送POS中心的訊息報文結構包括TPDU、報文頭和應用資料三部分:
——TPDU說明:長度為10個位元組,壓縮時用BCD碼錶示為5個位元組長度的數值。
——報文頭說明:總長度為12位元組,壓縮時用BCD碼錶示為6個位元組長度的數值。
——應用資料說明:一般長度都是4個位元組,壓縮時用BCD碼錶示為2個位元組的長度的數值。
所以上述報文中前五個位元組為TPDU,即60 00 03 00 00
報文頭佔用六個位元組,即 60 31 00 31 07 30
應用資料佔用2個位元組,即 02 00 也就是”0200”
——0200金融類請求訊息:
● POS查詢請求。
● POS消費請求。
● POS消費撤銷請求。
● POS預授權完成(請求)請求。
● POS預授權完成撤銷請求。
● 電子現金離線消費請求。
● 分期付款消費請求。
● 分期付款消費撤銷請求。
● 基於PBOC電子錢包/電子現金的IC圈存類交易請求。
● 磁條卡現金充值請求。
第二步
分析點陣圖:
首先取第十四個位元組,即0x30 ,轉化為二進位制為0011 0000,在該位元組的第一位為0(從左往右)表示當前報文中只需包括64個域,也就是從當前位元組開始連續8個位元組為點陣圖(包括當前位元組),如要包括128個域,該位為1。
現在進入關鍵的點陣圖分析,現在我們取到了表示點陣圖的8個位元組即30 20 04 C0 20 C0 98 11,轉為二進位制為
00110000 00100000 00000100 11000000 00100000 11000000 10011000 00010001
點陣圖中為1的位置即代表相應的域,在上面的二進位制位中從左往右有第3位、第4位、第11位、第22位、第25位、第26位、第35位、第41位、第42位、第49位、第52位、第53位、第60位、第64位。
下面開始這些域中的資料,首先分析3域,3域為交易處理碼,壓縮成BCD碼後佔定長3個位元組,我們從點陣圖所佔的8個位元組後開始連續取3個位元組,即 00 00 00,解壓後即為“000000”,具體代表含義這裡就不敘述了。
4域為交易金額,壓縮成BCD碼後佔定長6個位元組,同理取6個位元組,即00 00 00 00 00 01,也就是金額0.01元,具體轉換參考銀聯規範。
11域為受卡方系統跟蹤號(流水號),壓縮成BCD碼佔定長3個位元組,同理取3個位元組,即00 03 49,即000349。
22域為服務點輸入方式碼,壓縮成BCD碼佔定長2個位元組,同理取2個位元組,即02 10,由於22域本身只佔3個位元組,壓縮時左靠,右補0,所以轉換為“021”,具體含義不再敘述。
25域為服務點條件碼,壓縮成BCD碼佔定長1個位元組,同理取1個位元組,即00,轉換為“00”,“00”代表正常提交。
26域為服務點PIN獲取碼,壓縮成BCD碼佔定長1個位元組,同理取1個位元組,即12,轉換為“12”,表示服務點裝置所允許輸入的個人密碼明文的最大長度為12。
解下來的35域由於不是定長,所以處理方法不同,先取一個位元組,即30,轉換為“30”,表示第二磁軌的資料佔用30個位元組,取連續15個位元組即62 25 82 21 12 99 63 01 5D 15 11 10 10 00 00,這裡不對這串資料進行說明了。
41域為受卡機終端標識碼,佔8個位元組的定長域,取35 36 38 35 32 33 31 34。
42域為受卡方標識碼,佔15個位元組的定長域,取32 33 35 32 31 34 35 32 36 38 35 39 32 33 36。
49域為交易貨幣程式碼,佔3個位元組的定長域,取31 35 36。
52域為個人標識碼資料,佔8個位元組的定長二進位制數域,取C6 24 83 4D 36 7E 9E 9E。
53域為安全控制資訊,壓縮成BCD碼佔8個位元組定長域,取20 00 00 00 00 00 00 00。
60域為自定義域,為不定長域,先取長度(壓縮成BCD碼佔兩個位元組),即00 13,轉換為13即佔60域佔13個位元組,壓縮成BCD碼佔7個位元組,取22 00 00 08 00 05 00。
64域為報文鑑別碼,佔定長8個位元組,取最後八個位元組36 37 41 32 32 39 39 41。
相關文章
- 深入理解OSPF協議協議
- 深入理解 HTTP 協議HTTP協議
- 深入理解TCP/IP協議TCP協議
- 深入理解 tcp 協議(一)TCP協議
- 深入理解HTTP協議(轉)HTTP協議
- 深入理解HTTPS協議HTTP協議
- 【協議】AAA Radius協議的常用報文分析協議
- Http協議報文詳解HTTP協議
- 協議CAN&報文&仲裁協議
- 深入理解 Web 協議 (三):HTTP 2Web協議HTTP
- MQTT協議 -- 訊息報文格式MQQT協議
- HTTP協議-HTTP響應報文HTTP協議
- RTP協議的報文結構協議
- ModbusTCP協議報文詳細分析TCP協議
- 博文推薦|深入解析 BookKeeper 多副本協議(一)協議
- 深入理解 web 協議(一)- http 包體傳輸Web協議HTTP
- 理解http協議HTTP協議
- WebSocket協議深入探究Web協議
- 深入理解 FastCGI 協議以及在 PHP 中的實現AST協議PHP
- 理解ARP協議協議
- 理解 HTTPS 協議HTTP協議
- 出了紕漏,舊文重發,20張圖理解 IP 協議協議
- WebSocket協議的深入探究Web協議
- 理解 OAuth2 協議OAuth協議
- https協議的理解HTTP協議
- 理解 Redis 的 RESP 協議Redis協議
- 如何理解TCP/IP協議?TCP協議
- 指南:動態路由協議OSPF基礎,OSPF報文,LSA路由協議
- 計算機網路 之 TCP協議報文結構計算機網路TCP協議
- 深入 RPC 訊息協議RPC協議
- 深入瞭解 gRPC:協議RPC協議
- TCP協議圖文秒懂TCP協議
- 關於wsgi協議的理解協議
- 深入淺出Websocket(一)Websocket協議Web協議
- Siemens 西門子 S7協議及報文格式詳解協議
- 一文講透Modbus協議協議
- 第22條:理解NSCopying協議協議
- Http網路協議包 (快速理解)HTTP協議