本發(fā)明涉及生成交換消息唯一包ID的算,尤其涉及一種生成金融數(shù)據(jù)交換消息唯一包ID的算法。
背景技術(shù):
在Windows操作系統(tǒng)下,系統(tǒng)本身提供了一種GUID的算法,可以通過COM接口CoCreateGuid函數(shù)取得。在Linux下,也可以通過第三方的庫實(shí)現(xiàn)UUID的功能。但以上兩種方法都有自身的缺陷,無法在金融數(shù)據(jù)交換平臺中使用。
在現(xiàn)有Windows操作系統(tǒng)下,系統(tǒng)本身提供了一種GUID的算法,可以通過COM接口CoCreateGuid函數(shù)取得。但是該技術(shù)方法有一個(gè)重要的缺陷是,在一秒鐘內(nèi)只能生成一個(gè)唯一的GUID,如果在同一秒內(nèi)生成多個(gè)GUID,則該GUID會重復(fù)。由于在金融數(shù)據(jù)交換系統(tǒng)中,一秒鐘需要處理幾十萬個(gè)不同的消息包,每一個(gè)包ID都不允許重復(fù),顯然一秒鐘只能生成一個(gè)包ID的算法是不能滿足需求的。另外,金融數(shù)據(jù)交換平臺要求在多個(gè)不同平臺下運(yùn)行,比如Windows、Linux、AIX、HP-UX等,某一個(gè)操作系統(tǒng)提供的算法無法移植到其它操作系統(tǒng),因此需要發(fā)明一種新的算法,能在常用各種操作系統(tǒng)(Windows、Linux、AIX、HP-UX)上通用的算法,同時(shí)保證在整個(gè)系統(tǒng)內(nèi),一秒內(nèi)百萬個(gè)以內(nèi)消息包ID的唯一性。
技術(shù)實(shí)現(xiàn)要素:
為了解決現(xiàn)有技術(shù)中的問題,本發(fā)明提供了一種生成金融數(shù)據(jù)交換消息唯一包ID的算法。
本發(fā)明提供了一種生成金融數(shù)據(jù)交換消息唯一包ID的算法,通過以下部分生成金融數(shù)據(jù)交換消息唯一包ID:
生成包ID的計(jì)算機(jī)網(wǎng)卡MAC地址;
生成包ID的計(jì)算機(jī)的本地時(shí)間;
進(jìn)程PID;
累加數(shù);
增加本地指針的字段。
作為本發(fā)明的進(jìn)一步改進(jìn),所述本地時(shí)間精確到秒。
作為本發(fā)明的進(jìn)一步改進(jìn),將所述金融數(shù)據(jù)交換消息唯一包ID轉(zhuǎn)換為Base64格式進(jìn)行編碼。
本發(fā)明的有益效果是:通過上述方案,能在常用各種操作系統(tǒng)(Windows、Linux、AIX、HP-UX)上通用的算法,同時(shí)保證在整個(gè)系統(tǒng)內(nèi),一秒內(nèi)百萬個(gè)以內(nèi)消息包ID的唯一性。
具體實(shí)施方式
下面通過具體實(shí)施方式對本發(fā)明進(jìn)一步說明。
為了保證整個(gè)系統(tǒng)內(nèi),消息包ID的唯一性,首先需要考慮系統(tǒng)的特點(diǎn)。金融數(shù)據(jù)交換平臺的特點(diǎn)是:
(1)分布式系統(tǒng),消息包ID的生成位于各個(gè)不同的客戶端機(jī)器或服務(wù)端計(jì)算機(jī)上,因此,需要在保證在任意一臺計(jì)算機(jī)上生成的包ID不同。
(2)多進(jìn)程,每一個(gè)客戶端程序或服務(wù)端程序都是多進(jìn)程的,也就是說,需要避免在同一個(gè)時(shí)刻,生成多個(gè)包ID重復(fù)的問題。
(3)常見操作系統(tǒng)上可移植。
因此,為了生成唯一包ID,需要在空間和時(shí)間上都唯一,亦即保證在不同的計(jì)算機(jī)上,同一時(shí)刻,生成的包ID唯一。從這個(gè)思路出發(fā),發(fā)明的一種生成金融數(shù)據(jù)交換消息唯一包ID的算法,由以下幾個(gè)部分組成:
(1)生成包ID的計(jì)算機(jī)網(wǎng)卡MAC地址。通過該字段,保證了在不同的計(jì)算機(jī)上生成的包ID肯定是不同的。即在空間上唯一。
(2)生成包ID的計(jì)算機(jī)的本地時(shí)間。該本地時(shí)間需要精確到秒。
(3)進(jìn)程PID。在同一個(gè)時(shí)刻,同一臺計(jì)算機(jī)內(nèi)進(jìn)程PID是唯一的。
(4)累加數(shù):累加數(shù)的目的是保證在同一秒內(nèi),同一臺計(jì)算機(jī)內(nèi)同一個(gè)進(jìn)程PID生成幾十萬個(gè)包ID的值是不同的。
(5)由于在金融數(shù)據(jù)交換平臺中,以上算法也將封裝到一個(gè)動(dòng)態(tài)庫中供客戶調(diào)用。由于客戶調(diào)用本接口的方式可能是不確定的,也可能千奇百怪,甚至是用法錯(cuò)誤的。為了避免本算法被多個(gè)不同接口調(diào)用多次的情況,兼容客戶可能產(chǎn)生的錯(cuò)誤,因此,在算法中增加本地指針的字段,通過這個(gè)字段,即使使用者使用不正確的方式調(diào)用,都可以得到正確的結(jié)果。
通過以上算法中的五個(gè)字段的組合,可以得到一個(gè)唯一的包ID。在具體實(shí)踐過程中,為了避免以上字段過長,可以將以上數(shù)據(jù)轉(zhuǎn)換為Base64格式進(jìn)行編碼,以縮短包ID長度,提高在數(shù)據(jù)傳輸中的效率。
本發(fā)明提供的一種生成金融數(shù)據(jù)交換消息唯一包ID的算法,為滿足證券、銀行等金融行業(yè)機(jī)構(gòu)件對金融數(shù)據(jù)交換的需求,加速金融數(shù)據(jù)交換平臺的推廣應(yīng)用;促進(jìn)金融行業(yè)的業(yè)務(wù)協(xié)議的標(biāo)準(zhǔn)化;促進(jìn)金融行業(yè)的各項(xiàng)業(yè)務(wù)發(fā)展與創(chuàng)新。本發(fā)明提供的一種生成金融數(shù)據(jù)交換消息唯一包ID的算法,已經(jīng)應(yīng)用在金融數(shù)據(jù)交換平臺產(chǎn)品中,也可以應(yīng)用到其它消息交換中間件系統(tǒng)中。
以上內(nèi)容是結(jié)合具體的優(yōu)選實(shí)施方式對本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。