本篇文章參考了中國銀聯POS終端規範,因此若有不明白的能夠去個人資源裏面下載。
如今咱們有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
第一步
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。安全