下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、全面掌握ISO8583報(bào)文最開始時(shí),金融系統(tǒng)只有IBM這些大的公司來提供設(shè)備,象各種主機(jī)與終端等。在各個(gè)計(jì)算機(jī)設(shè)備之間,需要交換數(shù)據(jù)。我們知道數(shù)據(jù)是通過網(wǎng)絡(luò)來傳送的,而在網(wǎng)絡(luò)上傳送的數(shù)據(jù)都是基于0或1這樣的二進(jìn)制數(shù)據(jù),如果沒有對(duì)數(shù)據(jù)進(jìn)行編碼,則這些數(shù)據(jù)沒有人能夠理解,屬于沒有用的數(shù)據(jù)。起初的X.25、SDLC以及現(xiàn)在流行的TCP/IP網(wǎng)絡(luò)協(xié)議都提供底層的通訊編碼協(xié)議,它們解決了最底層的通訊問題,能夠?qū)⒁淮址麖囊粋€(gè)地方傳送到另一個(gè)地方。但是,僅僅傳送字符串是沒有太大意義的,怎樣來解析字符串代表什么內(nèi)容是非常重要的,否則傳送一些“0123abcd”的字符串也是無用的亂碼。讓我們隨著時(shí)光回到幾十年
2、前的某個(gè)時(shí)刻,假設(shè)我們被推到歷史的舞臺(tái)上,由我們來設(shè)計(jì)一個(gè)通用報(bào)文協(xié)議,來解決金融系統(tǒng)之間的報(bào)文交換,暫且稱該協(xié)議叫做ISO8583協(xié)議。此時(shí),技術(shù)是在不斷的前行,當(dāng)初IBM一支獨(dú)秀的局面好像已經(jīng)不妙了,各種大小不一的公司都進(jìn)入金融行業(yè)以求能有所斬獲,呈一片百花齊放的局面。我們?cè)鯓觼碓O(shè)計(jì)一個(gè)報(bào)文協(xié)議,能夠?qū)⑦@些如雨后春筍般出現(xiàn)的所有公司都納入進(jìn)來,其實(shí)也不是一件很簡(jiǎn)單的事。我們還是先一步步的來考慮吧。金融行業(yè)其實(shí)涉及到的數(shù)據(jù)內(nèi)容并不是成千上萬,無法統(tǒng)計(jì),恰恰相反,是比較少的。我們都可以在心底數(shù)得過來,象交易類型、帳號(hào)、帳戶類型、密碼、交易金額、交易手續(xù)費(fèi)、日期時(shí)間、商戶代碼、2磁3磁數(shù)據(jù)、交易
3、序列號(hào)等,把所有能夠總結(jié)出來的都總結(jié)起來不過100個(gè)左右的數(shù)據(jù)。那我們可以首先簡(jiǎn)單的設(shè)計(jì)ISO8583,定義128個(gè)字段,將所有能夠考慮到的類似上面提到的“帳號(hào)”等金融數(shù)據(jù)類型,按照一個(gè)順序排起來,分別對(duì)應(yīng)128個(gè)字段中的一個(gè)字段。每個(gè)數(shù)據(jù)類型占固定的長(zhǎng)度,這個(gè)順序和長(zhǎng)度我們都事先定義好。這樣就簡(jiǎn)單了,要發(fā)送一個(gè)報(bào)文時(shí),就將128個(gè)字段按照順序接起來,然后將接起來的整串?dāng)?shù)據(jù)包發(fā)送出去。任何金融軟件收到ISO8583包后,直接按照我們定義的規(guī)范解包即可,因?yàn)檎麄€(gè)報(bào)文的128個(gè)字段從哪一位到哪一位代表什么,大家都知道,只要知道你的數(shù)據(jù)包是ISO8583包即可,我們都已經(jīng)定義好了。比如第1個(gè)字段是“
4、交易類型”,長(zhǎng)度為4位,第2個(gè)字段位是“帳號(hào)”,為19位等等。接收方就可以先取4位,再取接著的19位,依次類推,直到整個(gè)數(shù)據(jù)包128個(gè)字段都解完為止。其實(shí)這種做法真是簡(jiǎn)單直接,基本上就可以滿足需要了。不過我們有幾個(gè)問題要思考下:1、我怎么知道每個(gè)字段的數(shù)據(jù)類型呢,是數(shù)字還是字符?2、每個(gè)傳送的報(bào)文都把128個(gè)字段都傳過去,那網(wǎng)絡(luò)帶寬能夠承受得了,有時(shí)候我可能只需要其中5個(gè)字段,結(jié)果多收到了123個(gè)無用的字段。3、如果我某些字段的長(zhǎng)度不固定,屬于變長(zhǎng)怎么辦,因?yàn)槟悻F(xiàn)在解包是當(dāng)作數(shù)據(jù)包每個(gè)字段都是固定的,用C語言解包時(shí)直接依靠指針取固定長(zhǎng)度的一串字符做為一個(gè)字段。我們來一一解決這些問題。第一個(gè)問題
5、簡(jiǎn)單,我在定義ISO8583時(shí)除了定義每個(gè)字段表示什么,還規(guī)定其內(nèi)容是數(shù)字或是字符等即可??紤]可能出現(xiàn)的類型不過有以下幾種:字母、數(shù)字、特殊字符、年月日等時(shí)間、二進(jìn)制數(shù)據(jù)。比如我對(duì)128個(gè)字段中的“商戶類型”字段定義其長(zhǎng)度是15,同時(shí)定義其類型為字母。再精細(xì)點(diǎn),如果“商戶類型”里面的數(shù)據(jù)同時(shí)包括數(shù)字和字母呢?那我們就定義其類型為字母也可,為數(shù)字也可,即一個(gè)字段可以同時(shí)屬于多個(gè)類型。第二個(gè)問題稍微復(fù)雜點(diǎn)。其本質(zhì)就是如果我只傳128個(gè)字段的5個(gè)字段,接收方怎么知道我傳了哪幾個(gè)字段給它了。要是我們把剩下的123全部填成0或其他特殊標(biāo)識(shí),標(biāo)明該字段不需要使用?這種處理方法沒有半點(diǎn)用處,沒有解決網(wǎng)絡(luò)帶寬
6、的本質(zhì)問題,還是要傳128個(gè)字段。換個(gè)思路,我在報(bào)文前面加上個(gè)包頭,包頭里面包含的信息能夠讓別人知道只傳了5個(gè)字段。怎樣設(shè)計(jì)這個(gè)包頭,可以這樣,我們用16個(gè)字節(jié),即128個(gè)bit(個(gè)字節(jié)等于8bit)來表示128個(gè)字段中的某個(gè)字段是否存在。每個(gè)bit在計(jì)算機(jī)的二進(jìn)制里面不是1就是0,如果是1就表示對(duì)應(yīng)的字段在本次報(bào)文中存在,如果是0就是不存在。這樣好了,如果別人接收到了ISO8583報(bào)文,可以先根據(jù)最前面的報(bào)文頭,就知道緊接著報(bào)文頭后面的報(bào)文有哪些字段,沒有哪些字段了。比如,我要發(fā)送5個(gè)字段,分別屬于128個(gè)字段中的第2、3、6、8、9字段,我就可以將128bit的報(bào)文頭填成011001011
7、000000000,一共128個(gè)bit,后面就全是0了。注意其中第2、3、6、8、9位為1,其他都為0。有了這個(gè)128bit的報(bào)文頭,我們就可以只發(fā)送需要的5個(gè)字段了。怎樣組織報(bào)文?先放上這128bit,即16個(gè)字節(jié)的頭,然后在頭后面放2、3、6、8、9字段,這些字段緊挨在一起,3和6之間也不需要填上4、5這兩個(gè)字段了。接收方收到這個(gè)報(bào)文,它會(huì)根據(jù)128bit的報(bào)文頭來解包,它自然知道把第3個(gè)字段取出后,就直接在第3字段的后面取第6個(gè)字段,每個(gè)字段的長(zhǎng)度在ISO8583里面都定義好了,很輕松就把數(shù)據(jù)包解出來了。這下好了,為了解決上面的第二問題,我們只是在報(bào)文中增加了16個(gè)字節(jié)的數(shù)據(jù),就輕松搞定
8、了,我們把這16個(gè)字節(jié)稱為bitmap,即位圖,用來表示某個(gè)位是否存在。不過我們?cè)偕晕?yōu)化一下,考慮到很多時(shí)候報(bào)文不需要128個(gè)字段這么多,其一半64個(gè)字段都不一定能夠用完。那我可以將報(bào)文頭由128bit減到64bit,只有在需要的時(shí)候才把剩下的64bit放到報(bào)文里面,這樣報(bào)文長(zhǎng)度不又少了8個(gè)字節(jié)嗎?是個(gè)好主意。我們把ISO8583的128個(gè)字段中最常見的都放到前64個(gè)字段中,那我們可以將處理縮小一倍。這樣我一般發(fā)送報(bào)文時(shí)只需發(fā)送64bit,即一個(gè)字節(jié)的報(bào)文頭,再加上需要的幾個(gè)字段就可以了。如果有些報(bào)文用到64到128之間的字段呢?這個(gè)也好辦,我把64bit報(bào)文頭的第一位bit用來代表特殊含義
9、,如果該bit為1,則表示64bit后面跟了剩下的64bit報(bào)文頭;如果第一位bit為0,則表示64bit后面沒有跟剩下的64bit報(bào)文頭,直接是128個(gè)字段中的報(bào)文了。那們,接收方會(huì)判斷一下報(bào)頭的第一個(gè)bit是1還是0,從而知道報(bào)文頭是64bit還是128bit了,就可以做相應(yīng)處理。因?yàn)閳?bào)文頭第二個(gè)64bit屬于有時(shí)候有,所以我們叫它Extendedbitmap擴(kuò)展位圖,相應(yīng)的報(bào)文頭最開始的64bit我們叫它Primarybitmap主位圖。我們直接把擴(kuò)展位圖固定放到128個(gè)字段的第一個(gè)字段,而主位圖每個(gè)數(shù)據(jù)包都有,就強(qiáng)制性放在所有128個(gè)字段的前面,并不歸入128個(gè)字段中去。第三個(gè)問題可以
10、考慮這樣解決。比如第2個(gè)字段是“帳號(hào)”,是不定長(zhǎng)的,可能有的銀行帳號(hào)是19位,有的是17位等。我們定ISO8583規(guī)范時(shí)可以規(guī)定第2個(gè)字段是25位,這下足夠?qū)?9和17的情況都包含進(jìn)來,但是如果以后出現(xiàn)了30位的怎么辦?那我們現(xiàn)在將字段定為100位。以后超過100位怎么辦,況且如果你只有19位的帳號(hào),我們定義了100位,那81位的數(shù)據(jù)不是浪費(fèi)了網(wǎng)絡(luò)的帶寬??磥眍A(yù)先定義一個(gè)我們認(rèn)為比較大的位數(shù)是不太好的。我們這樣,對(duì)于第2個(gè)字段“帳號(hào)”,在字段的開頭加上“帳號(hào)”的長(zhǎng)度。比如帳號(hào)是0123456789,一共10位,我們變成100123456789,注意前面多了個(gè)10,表示后面的10位為帳號(hào)。如果你
11、接觸過COM里面的BSTR,應(yīng)該對(duì)這種處理比較熟悉了。接收方收到該字段后,它知道ISO8583規(guī)定第2個(gè)字段“帳號(hào)”是變長(zhǎng)的,所以會(huì)先取前面的2位出來,獲取其值,此時(shí)為長(zhǎng)度,然后根據(jù)該長(zhǎng)度值知道應(yīng)該拷貝該字段后面哪幾位數(shù)據(jù),才是真正的帳號(hào)。如果你覺得長(zhǎng)度如果只有兩位最多只能表示99位長(zhǎng),不太夠,我們也定義可以允許前面3位都為長(zhǎng)度的變長(zhǎng)字段,這樣就有999位長(zhǎng),應(yīng)該夠了吧。在規(guī)范里面如果我定義某個(gè)字段的屬性是“LLVAR”,你注意了,其中的LL表示長(zhǎng)度,VAR表示后面的數(shù)據(jù),兩個(gè)LL表示兩位長(zhǎng),最大是99,如果是三位就是“LLLVAR”,最大是999。這樣看我們定義的ISO8583規(guī)范文檔時(shí)直接根據(jù)這幾個(gè)字母就理解某個(gè)變長(zhǎng)字段的意思了。該解決的幾個(gè)問題到這里都解決了,我們來回顧下自己設(shè)計(jì)的ISO8583規(guī)范。其實(shí)沒有什么,無非是把金融行業(yè)可能出現(xiàn)的數(shù)據(jù)分門別類,排好順序,接著把它們連接起來,組成一個(gè)報(bào)文發(fā)送出去而已。其中針對(duì)該報(bào)文的設(shè)計(jì)進(jìn)行了一些優(yōu)化,引入了bitmap位圖的概念,也算是一個(gè)不錯(cuò)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年物業(yè)使用權(quán)合同轉(zhuǎn)讓及物業(yè)管理責(zé)任追究辦法協(xié)議3篇
- 2025年度草莓種植基地病蟲害防治服務(wù)合同3篇
- 年度乙二醇二乙醚戰(zhàn)略市場(chǎng)規(guī)劃報(bào)告
- 年度高壓水流清洗機(jī)產(chǎn)業(yè)分析報(bào)告
- 年度中高端衡器競(jìng)爭(zhēng)策略分析報(bào)告
- 2024-2025學(xué)年高中歷史第五單元近代中國的思想解放潮流第14課從“師夷長(zhǎng)技”到維新變法課后作業(yè)含解析新人教版必修3
- 二零二五年快遞公司快遞配送員招聘合同參考范本3篇
- 2025年苗圃技術(shù)員工作合同規(guī)范文本
- 2025年熱泵熱水工程采購合同模板2篇
- 二零二五年度酒店客房租賃與客房設(shè)施維護(hù)合同12篇
- 《3-6歲兒童學(xué)習(xí)與發(fā)展指南》專題培訓(xùn)
- 河道旅游開發(fā)合同
- 導(dǎo)尿及留置導(dǎo)尿技術(shù)
- 情人合同范例
- 建筑公司勞務(wù)合作協(xié)議書范本
- 安徽省合肥市2023-2024學(xué)年高一上學(xué)期物理期末試卷(含答案)
- 《基于杜邦分析法的公司盈利能力研究的國內(nèi)外文獻(xiàn)綜述》2700字
- 儒家思想講解課程設(shè)計(jì)
- 2024年個(gè)人汽車抵押借款合同范本(四篇)
- 軌道交通設(shè)備更新項(xiàng)目可行性研究報(bào)告-超長(zhǎng)期國債
- 2024-2030年中國一氧化二氮?dú)怏w行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
評(píng)論
0/150
提交評(píng)論