一個8583報文的簡單例子

8583是這樣的,我舉一個簡單的例子。以64個域的報文來舉例,域是什麼我也說不清楚,你可以把它想象爲醫院放藥的抽屜,一個抽屜預先定義好要放什麼東西,比如止咳糖漿,或者感冒沖劑,一般情況下定義放止咳糖漿的抽屜最好永遠放止咳糖漿,不要放別的東西,當然你也可以放板藍根,但這樣的話容易出錯,也不太規範。
數量是這麼規定的,有三種情況:
首先是定量,也就是說定義好這個抽屜放30瓶止咳糖漿,就放30瓶一瓶也不能多,一瓶也不能少。
其次是LLVAR,也就是說用1位字節定義數量,比如0x12表示裏頭放12瓶,當然你也可以理解爲16+2=18瓶。但要是0x12表示12,那0x13就等於13,不要0x12=12 ,0x13=19
最後是LLLVAR,是2位字節表示數量,比如 0x01,0x04 = 104

域也就是這樣的,一共有64個域,每個域預先定義了內容和長度

有一個叫做BITMAP的,也就是位圖,定義了一個數據包裏包含
了幾個域。舉個例子
20 00 38 00 00 00 00 34 
你把它解開,排列一下
20 = 0010 0000
00 = 0000 0000
38 = 0011 1000 
依次類推,得到一串數字
0010 0000 0000 0000 0011 1000 0000 0000 0000 0000 0000 0000 0000 0000 0011 0100
然後從左到右數一下里頭含有1的是那幾位,上面的例子我們得到
3 19 20 21 59 60 62 ,這幾位含有1。也就是說接下來的報文包含有這幾個域。

好了說了那麼多,我們來做一個簡單的例子比如消費交易,需要上送交易類型,卡號等等,定義如下

卡號 第2域 LLVAR BCD 5309987876545342
交易類型 第3域 長度6 BCD 900000 
金額 第4域 長度12 BCD 100分
時間 第7域 長度8 BCD 20030802
2磁道信息 第35域 LLVAR ASCII 123456 
3磁道信息 第36域 LLLVAR BCD 123456001
商戶號 第41域 LLVAR ASCII 98765432

好了我們現在開始打包,首先按照長度和類型把上面的數據處理一下
卡號 165309987876545342
交易類型 900000
金額 000000000100
時間 20030802
2磁道 06313233343536
3磁道 0009123456001
商戶號 083938373635343332

接下來我們按照域信息生成位圖
因爲有第2域,所以第二個位置是1,由第三域,所以第三個位置
是1,。。。
依此類推得到一串數字
0111 0010 0000 0000 0000 0000 0000 0000 0011 0000 1000 0000 0000 0000 0000 0000
轉換過來,就是
72 00 00 00 30 80 00 00 這個就是BITMAP了
然後把上面的數據按照BITMAP+每個域的內容,依次排列
就得到這個包的內容了
7200000030800000165309987876545342900000000000000100
20030802063132333435360009123456001083938373635343332
前頭再加上TPDU和MSGID就是最後的數據包

很簡單把,解包也一樣的。


本文轉載自:http://lucky16.iteye.com/blog/2053066

發佈了58 篇原創文章 · 獲贊 43 · 訪問量 44萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章