<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    心有多大舞臺便有多大

    Embrace changes, pursue excellence, share niceness.

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

    posted on 2009-03-31 09:41 pony 閱讀(14167) 評論(4)  編輯  收藏 所屬分類: 金融

    評論

    # re: ISO8583接口的詳細資料 2009-03-31 09:55 pony

    全面掌握ISO8583報文


    最開始時,金融系統只有IBM這些大的公司來提供設備,象各種主機與終端等。在各個計算機設備之間,需要交換數據。我們知道數據是通過網絡來傳送的,而在網絡上傳送的數據都是基于0或1這樣的二進制數據,如果沒有對數據進行編碼,則這些數據沒有人能夠理解,屬于沒有用的數據。起初的X.25、SDLC以及現在流行的TCP/IP網絡協議都提供底層的通訊編碼協議,它們解決了最底層的通訊問題,能夠將一串字符從一個地方傳送到另一個地方。但是,僅僅傳送字符串是沒有太大意義的,怎樣來解析字符串代表什么內容是非常重要的,否則傳送一些“0123abcd”的字符串也是無用的亂碼。

    讓我們隨著時光回到幾十年前的某個時刻,假設我們被推到歷史的舞臺上,由我們來設計一個通用報文協議,來解決金融系統之間的報文交換,暫且稱該協議叫做ISO8583協議。此時,技術是在不斷的前行,當初IBM一支獨秀的局面好像已經不妙了,各種大小不一的公司都進入金融行業以求能有所斬獲,呈一片百花齊放的局面。我們怎樣來設計一個報文協議,能夠將這些如雨后春筍般出現的所有公司都納入進來,其實也不是一件很簡單的事。

    我們還是先一步步的來考慮吧。金融行業其實涉及到的數據內容并不是成千上萬,無法統計,恰恰相反,是比較少的。我們都可以在心底數得過來,象交易類型、帳號、帳戶類型、密碼、交易金額、交易手續費、日期時間、商戶代碼、2磁3磁數據、交易序列號等,把所有能夠總結出來的都總結起來不過100個左右的數據。那我們可以首先簡單的設計ISO8583,定義128個字段,將所有能夠考慮到的類似上面提到的“帳號”等金融數據類型,按照一個順序排起來,分別對應128個字段中的一個字段。每個數據類型占固定的長度,這個順序和長度我們都事先定義好。這樣就簡單了,要發送一個報文時,就將128個字段按照順序接起來,然后將接起來的整串數據包發送出去。

    任何金融軟件收到ISO8583包后,直接按照我們定義的規范解包即可,因為整個報文的128個字段從哪一位到哪一位代表什么,大家都知道,只要知道你的數據包是ISO8583包即可,我們都已經定義好了。比如第1個字段是“交易類型”,長度為4位,第2個字段位是“帳號”,為19位等等。接收方就可以先取4位,再取接著的19位,依次類推,直到整個數據包128個字段都解完為止。

    其實這種做法真是簡單直接,基本上就可以滿足需要了。不過我們有幾個問題要思考下:
    1、 我怎么知道每個字段的數據類型呢,是數字還是字符?
    2、 每個傳送的報文都把128個字段都傳過去,那網絡帶寬能夠承受得了,有時候我可能只需要其中5個字段,結果多收到了123個無用的字段。
    3、 如果我某些字段的長度不固定,屬于變長怎么辦,因為你現在解包是當作數據包每個字段都是固定的,用C語言解包時直接依靠指針取固定長度的一串字符做為一個字段。

    我們來一一解決這些問題。

    第一個問題簡單,我在定義ISO8583時除了定義每個字段表示什么,還規定其內容是數字或是字符等即可。考慮可能出現的類型不過有以下幾種:字母、數字、特殊字符、年月日等時間、二進制數據。比如我對128個字段中的“商戶類型”字段定義其長度是15,同時定義其類型為字母。再精細點,如果“商戶類型”里面的數據同時包括數字和字母呢?那我們就定義其類型為字母也可,為數字也可,即一個字段可以同時屬于多個類型。

    第二個問題稍微復雜點。其本質就是如果我只傳128個字段的5個字段,接收方怎么知道我傳了哪幾個字段給它了。要是我們把剩下的123全部填成0或其他特殊標識,標明該字段不需要使用?這種處理方法沒有半點用處,沒有解決網絡帶寬的本質問題,還是要傳128個字段。

    換個思路,我在報文前面加上個包頭,包頭里面包含的信息能夠讓別人知道只傳了5個字段。怎樣設計這個包頭,可以這樣,我們用16個字節,即128個bit(一個字節等于8bit)來表示128個字段中的某個字段是否存在。每個bit在計算機的二進制里面不是1就是0,如果是1就表示對應的字段在本次報文中存在,如果是0就是不存在。這樣好了,如果別人接收到了ISO8583報文,可以先根據最前面的報文頭,就知道緊接著報文頭后面的報文有哪些字段,沒有哪些字段了。比如,我要發送5個字段,分別屬于128個字段中的第2、3、6、8、9字段,我就可以將128bit的報文頭填成011001011000000000………..,一共128個bit,后面就全是0了。注意其中第2、3、6、8、9位為1,其他都為0。

    有了這個128bit的報文頭,我們就可以只發送需要的5個字段了。怎樣組織報文?先放上這128bit,即16個字節的頭,然后在頭后面放2、3、6、8、9字段,這些字段緊挨在一起,3和6之間也不需要填上4、5這兩個字段了。接收方收到這個報文,它會根據128bit的報文頭來解包,它自然知道把第3個字段取出后,就直接在第3字段的后面取第6個字段,每個字段的長度在ISO8583里面都定義好了,很輕松就把數據包解出來了。

    這下好了,為了解決上面的第二問題,我們只是在報文中增加了16個字節的數據,就輕松搞定了,我們把這16個字節稱為bit map,即位圖,用來表示某個位是否存在。不過我們再稍微優化一下,考慮到很多時候報文不需要128個字段這么多,其一半64個字段都不一定能夠用完。那我可以將報文頭由128bit減到64bit,只有在需要的時候才把剩下的64bit放到報文里面,這樣報文長度不又少了8個字節嗎?

    是個好主意。我們把ISO8583的128個字段中最常見的都放到前64個字段中,那我們可以將處理縮小一倍。這樣我一般發送報文時只需發送64bit,即一個字節的報文頭,再加上需要的幾個字段就可以了。如果有些報文用到64到128之間的字段呢?這個也好辦,我把64bit報文頭的第一位bit用來代表特殊含義,如果該bit為1,則表示64bit后面跟了剩下的64bit報文頭;如果第一位bit為0,則表示64bit后面沒有跟剩下的64bit報文頭,直接是128個字段中的報文了。那們,接收方會判斷一下報頭的第一個bit是1還是0,從而知道報文頭是64bit還是128bit了,就可以做相應處理。因為報文頭第二個64bit屬于有時候有,所以我們叫它Extended bit map擴展位圖,相應的報文頭最開始的64bit我們叫它Primary bit map主位圖。我們直接把擴展位圖固定放到128個字段的第一個字段,而主位圖每個數據包都有,就強制性放在所有128個字段的前面,并不歸入128個字段中去。

    第三個問題可以考慮這樣解決。比如第2個字段是“帳號”,是不定長的,可能有的銀行帳號是19位,有的是17位等。我們定ISO8583規范時可以規定第2個字段是25位,這下足夠將19和17的情況都包含進來,但是如果以后出現了30位的怎么辦?那我們現在將字段定為100位。以后超過100位怎么辦,況且如果你只有19位的帳號,我們定義了100位,那81位的數據不是浪費了網絡的帶寬。看來預先定義一個我們認為比較大的位數是不太好的。

    我們這樣,對于第2個字段“帳號”,在字段的開頭加上“帳號”的長度。比如帳號是0123456789,一共10位,我們變成100123456789,注意前面多了個10,表示后面的10位為帳號。如果你接觸過COM里面的BSTR,應該對這種處理比較熟悉了。接收方收到該字段后,它知道ISO8583規定第2個字段“帳號”是變長的,所以會先取前面的2位出來,獲取其值,此時為長度,然后根據該長度值知道應該拷貝該字段后面哪幾位數據,才是真正的帳號。如果你覺得長度如果只有兩位最多只能表示99位長,不太夠,我們也定義可以允許前面3位都為長度的變長字段,這樣就有999位長,應該夠了吧。在規范里面如果我定義某個字段的屬性是“LLVAR”,你注意了,其中的LL表示長度,VAR表示后面的數據,兩個LL表示兩位長,最大是99,如果是三位就是“LLLVAR”,最大是999。這樣看我們定義的ISO8583規范文檔時直接根據這幾個字母就理解某個變長字段的意思了。

    該解決的幾個問題到這里都解決了,我們來回顧下自己設計的ISO8583規范。其實沒有什么,無非是把金融行業可能出現的數據分門別類,排好順序,接著把它們連接起來,組成一個報文發送出去而已。其中針對該報文的設計進行了一些優化,引入了bit map位圖的概念,也算是一個不錯的想法。

    剩下的工作就簡單了,我們就直接收集金融行業可能出現的數據字段類型,分成128個字段類型,如果沒有到128個這么多就先保留一些下來,另外考慮到有些人有特殊的要求,我們規定可以將128個字段中的幾個字段你自己來定義其內容,也算是一種擴展了。

    這樣,最后我們就得到了ISO8583規范的那張字段描述表了。想要詳細的知道每個字段的含義直接對著表看就可以,比較簡單。
      回復  更多評論   

    # re: ISO8583接口的詳細資料 2009-06-02 23:58 Adam

    你好,你是小馬?還是嘉哥?  回復  更多評論   

    # re: ISO8583接口的詳細資料[未登錄] 2011-05-18 11:06 aaa

    xili  回復  更多評論   

    # re: ISO8583接口的詳細資料 2012-12-13 19:37 zny

    不錯。  回復  更多評論   

    主站蜘蛛池模板: 亚洲色大成网站www永久男同| 精品韩国亚洲av无码不卡区| 一个人看的www在线观看免费| 亚洲精品无码永久在线观看男男 | 99久久人妻精品免费二区| 亚洲日本香蕉视频观看视频| 超pen个人视频国产免费观看| 国产精品极品美女自在线观看免费| 亚洲自偷自拍另类图片二区| 国产午夜无码视频免费网站| 99精品视频在线观看免费播放| 亚洲av无码专区国产不乱码| 亚洲AV日韩AV永久无码绿巨人| 永久黄网站色视频免费| 日本亚洲欧洲免费天堂午夜看片女人员| 亚洲三级中文字幕| 亚洲欭美日韩颜射在线二| 成人A级毛片免费观看AV网站| 中文字幕免费在线视频| 亚洲欧洲无码AV不卡在线| 久久精品国产精品亚洲艾| 免费永久看黄在线观看app| 最好看最新的中文字幕免费 | 最好看的中文字幕2019免费| 又粗又长又爽又长黄免费视频| 亚洲国产成人久久77| 亚洲人成网7777777国产| 免费观看四虎精品国产永久| 亚洲w码欧洲s码免费| 最新国产乱人伦偷精品免费网站 | 国产一区二区三区免费视频| 1000部禁片黄的免费看| 男女拍拍拍免费视频网站| 亚洲成av人片在线天堂无| 亚洲六月丁香六月婷婷色伊人| 亚洲色中文字幕无码AV| 亚洲av无码成人精品区| a级毛片无码免费真人| 希望影院高清免费观看视频| 国产成人精品免费久久久久| 国产无限免费观看黄网站|