識別碼生成方法和系統的製作方法
2023-12-01 03:12:31 1
專利名稱:識別碼生成方法和系統的製作方法
技術領域:
本發明涉及識別碼處理技術,尤其涉及一種識別碼生成方法和系統。
背景技術:
在基於關係型資料庫技術的軟體系統中,通常,每個數據表需要用一個ID來唯一 的標識某行記錄,比如ERP系統中每個生產訂單都會有一個唯一的標識。目前市場上的軟體產品中主要存在兩大類產生系統內唯一 ID的方法(1)採用 UUID(Universally Unique Identifier,通用唯一識別碼)的方式產生 一個全球唯一的識別碼。該方法的優點是已經有公開的算法,很多高級的開發語言本身已 經提供了相應的工具包,能夠保證在分布式環境中產生的ID具有唯一性,運行效率也比較 高。缺點是UUID由36個字符組成,長度過大,佔用存儲空間較多,在大型的資料庫系統中 會影響數據存取的效率,對於WEB系統來講,網絡上傳遞大量的此類ID所產生的流量也較 大,進而影響到網站響應的速度。(2)應用程式根據軟體運行環境的特定信息,運用一定的算法,自己產生一個依賴 於特定運行環境的唯一識別碼。該方法的優點是產生的ID長度可控,缺點是很難保證產生 的ID在整個系統尤其是分布式系統中唯一性,運行時通常需要考慮一些相關信息,往往運 行效率也較低。因此,需要一種識別碼生成方式,既能夠保證在分布式系統產生的ID具有唯一 性,又能夠有效的降低ID所佔的字節數,節約存儲空間,保證數據存儲的效率,不至於增加 太多的網絡流量。
發明內容
鑑於以上,本發明的技術方案所要解決的技術問題在於,提供一種識別碼生成方 法和系統,既能夠保證在分布式系統產生的ID具有唯一性,又能夠有效的降低ID所佔的字 節數,節約存儲空間,保證數據存儲的效率,不至於增加太多的網絡流量。本發明提供了一種識別碼生成方法,包括步驟S102,根據通用唯一識別碼通用 算法生成第一長度的第一字符串;步驟S 104,去除所述第一字符串中的連結符,將所述第 一長度的所述第一字符串變為第二長度的第二字符串;步驟S106,將所述第二長度的所述 第二字符串中的字符進行分組、壓縮,並將壓縮後的字符進行拼接,生成第三長度的第三字 符串,其中,所述第三字符串為識別碼。通過該技術方案,可以生成既有唯一性又節約存儲 空間的識別碼,保證數據存儲的效率。在上述技術方案中,優選地,在所述步驟S102中,所述第一長度為36個字符。在上述技術方案中,優選地,在所述步驟S104中,所述連結符為「_」。 在上述技術方案中,優選地,所述第二長度為32個字符,第三長度為22個字符,所 述步驟S106具體為步驟S1062,將所述32個字符分成11組,其中,第1組為2個字符,其 餘10組分別為3個字符;步驟S1064,將第2組至第11組的字符串分別進行壓縮,使用壓
4縮算法將每組由3個字符壓縮為2個字符;步驟S1066,將所述第1組的2個字符與所述第 2組至第11組的壓縮後的字符進行拼接,生成長度為22個字符的第三字符串。通過該技術 方案,可以減小字符串的長度,節約了存儲空間。在上述技術方案中,優選地,所述壓縮算法具體為將3位16進位的字符串轉化為 2位64進位的字符串,所述步驟S1064具體為使用64個字符來描述64進位數值,其中所 述 64 個字符包括#$0123456789ABCDEFGHIJKLMN0PQRSTUVWXYZabcdefghi jklmnopqrstuvw xyz,所述64個字符按照ASCII碼的順序進行排列;將16進位的三個字符傳化成10進位的 數字,轉化後的數值範圍為0至163 ;根據上述10進位的數字,產生長度為2個字符的64進 制的字符串。本發明還提供了一種識別碼生成系統,包括第一字符串生成模塊,根據通用唯一 識別碼通用算法生成第一長度的第一字符串;第二字符串生成模塊,去除所述第一字符串 中的連結符,將所述第一長度的所述第一字符串變為第二長度的第二字符串;第三字符串 生成模塊,將所述第二長度的所述第二字符串中的字符進行分組、壓縮,並將壓縮後的字符 進行拼接,生成第三長度的第三字符串,其中,所述第三字符串為識別碼。通過該技術方案, 可以生成既有唯一性又節約存儲空間的識別碼,保證數據存儲的效率。在上述技術方案中,優選地,所述第一長度為36個字符,所述連結符為「_」;所述 第二長度為32個字符,第三長度為22個字符。在上述技術方案中,優選地,第三字符串生成模塊包括分組模塊,將所述32個字 符分成11組,其中,第1組為2個字符,其餘10組分別為3個字符;壓縮模塊,將第2組至 第11組的字符串分別進行壓縮,使用壓縮算法將每組由3個字符壓縮為2個字符;拼接模 塊,將所述第1組的2個字符與所述第2組至第11組的壓縮後的字符進行拼接,生成長度 為22個字符的第三字符串。通過該技術方案,可以減小字符串的長度,節約了存儲空間。在上述技術方案中,優選地,所述壓縮算法具體為將3位16進位的字符串轉化為 2位64進位的字符串。通過上述技術方案,可以實現一種識別碼生成方法和系統,既能夠保證在分布式 系統產生的ID具有唯一性,又能夠有效的降低ID所佔的字節數,節約存儲空間,保證數據 存儲的效率,不至於增加太多的網絡流量。
圖1是根據本發明的一個實施例的識別碼生成方法的流程圖;圖2是根據本發明的又一實施例的識別碼生成系統的框圖;以及圖3是根據本發明的又一實施例的識別碼生成方法的處理流程圖。
具體實施例方式為了能夠更清楚地理解本發明的上述目的、特徵和優點,下面結合附圖和具體實 施方式對本發明進行進一步的詳細描述。在下面的描述中闡述了很多具體細節以便於充分理解本發明,但是,本發明還可 以採用其他不同於在此描述的其他方式來實施,因此,本發明並不限於下面公開的具體實 施例的限制。
圖1是根據本發明的一個實施例的識別碼生成方法的流程圖。如圖1所示,根據 本發明的實施例的識別碼生成方法包括步驟S102,根據通用唯一識別碼通用算法生成第 一長度的第一字符串;步驟S104,去除所述第一字符串中的連結符,將所述第一長度的所 述第一字符串變為第二長度的第二字符串;步驟S106,將所述第二長度的所述第二字符串 中的字符進行分組、壓縮,並將壓縮後的字符進行拼接,生成第三長度的第三字符串,其中, 所述第三字符串為識別碼。通過這樣的技術方案,可以生成既有唯一性又節約存儲空間的 識別碼,保證數據存儲的效率。在上述技術方案中,在所述步驟S102中,所述第一長度為36個字符。在上述技術方案中,在所述步驟S104中,所述連結符為「_」。在上述技術方案中,所述第二長度為32個字符,第三長度為22個字符,所述步驟 S106具體為步驟S1062,將所述32個字符分成11組,其中,第1組為2個字符,其餘10組 分別為3個字符;步驟S1064,將第2組至第11組的字符串分別進行壓縮,使用壓縮算法將 每組由3個字符壓縮為2個字符;步驟S1066,將所述第1組的2個字符與所述第2組至第 11組的壓縮後的字符進行拼接,生成長度為22個字符的第三字符串。這樣,就可以減小字 符串的長度,節約了存儲空間。在上述技術方案中,所述壓縮算法具體為將3位16進位的字符串轉化為2位64 進位的字符串,所述步驟S1064具體為使用64個字符來描述64進位數值,其中所述64個 字符包括#$0123456789ABCDEFGHIJKLMN0PQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,所 述64個字符按照ASCII碼的順序進行排列;將16進位的三個字符傳化成10進位的數字, 轉化後的數值範圍為0至163 ;根據上述10進位的數字,產生長度為2個字符的64進位的 字符串。通過上述技術方案,可以實現一種識別碼生成系統,既能夠保證在分布式系統產 生的ID具有唯一性,又能夠有效的降低ID所佔的字節數,節約存儲空間,保證數據存儲的 效率,不至於增加太多的網絡流量。圖2示出了根據本發明的又一實施例的識別碼生成系統的框圖。如圖2所示,根 據本發明的實施例的識別碼生成系統200包括第一字符串生成模塊202,根據通用唯一識 別碼通用算法生成第一長度的第一字符串;第二字符串生成模塊204,去除所述第一字符 串中的連結符,將所述第一長度的所述第一字符串變為第二長度的第二字符串;第三字符 串生成模塊206,將所述第二長度的所述第二字符串中的字符進行分組、壓縮,並將壓縮後 的字符進行拼接,生成第三長度的第三字符串,其中,所述第三字符串為識別碼。通過這樣 的技術方案,可以生成既有唯一性又節約存儲空間的識別碼,保證數據存儲的效率。在上述技術方案中,所述第一長度為36個字符,所述連結符為「_」;所述第二長度 為32個字符,第三長度為22個字符。 在上述技術方案中,第三字符串生成模塊206包括分組模塊,將所述32個字符分 成11組,其中,第1組為2個字符,其餘10組分別為3個字符;壓縮模塊,將第2組至第11 組的字符串分別進行壓縮,使用壓縮算法將每組由3個字符壓縮為2個字符;拼接模塊,將 所述第1組的2個字符與所述第2組至第11組的壓縮後的字符進行拼接,生成長度為22 個字符的第三字符串。這樣,就可以減小字符串的長度,節約了存儲空間。
在上述技術方案中,所述壓縮算法具體為將3位16進位的字符串轉化為2位64
6進位的字符串。通過上述技術方案,可以實現一種識別碼生成系統,既能夠保證在分布式系統產 生的ID具有唯一性,又能夠有效的降低ID所佔的字節數,節約存儲空間,保證數據存儲的 效率,不至於增加太多的網絡流量。圖3是根據本發明的又一實施例的識別碼生成方法的處理流程圖。首先介紹一下通用唯一識別碼的相關信息,通用唯一識別碼(UniversalIy Unique Identifier, UUID)是一個軟體建構的標準,亦為自由軟體基金會(Open Software Foundation, 0SF)的組織在分布式計算環境(Distributed Computing Environment, DCE) 領域的一部份。UUID能夠保證對在同一時空中的所有機器都是唯一的,它主要由三部分構成(1)當前的日期和時間;(2)時鐘序列;(3)全局唯一的IEEE機器識別號。UUID 是一個包含 36 個字符的字符串,格式為 χχχχχχχχ-χχχχ-χχχχ-χχχχχχ-χχχχχ XXXXX (8-4-4-4-12),其中每個χ是0-9或a-f範圍內的一個十六進位的數字。本實施例的識別碼生成方法基於UUID技術,以保證分布式系統中產生的ID具有 唯一性。為了降低ID的長度,本實施例的識別碼生成方法提供一種壓縮的方法,使長度為 36個字符的UUID轉化為等價的22個字符的ID。下面詳細描述本發明的實施例的識別碼生成方法的流程,如圖3所示在步驟S302 根據UUID通用算法產生長度為36個字符的字符串A ;在步驟S304 去掉字符串A中固定位置的4個連結符「_」,使字符串A的長度變為 32個字符;在步驟S306 把字符串A中的32個字符分成11組,其中第一組為2個字符,其餘 10組為3個字符;在步驟S308 把第二組到第十一組的字符串分別進行壓縮,每組由3個字符壓縮 為2個字符;在步驟S310 把第一組的2個字符和第二到第11組的壓縮後的字符進行拼接,產 生長度為22個字符的ID字符串。其中,步驟S308的壓縮算法主要是把3位16進位的字符串轉化為2位64進位的 字符串,轉化原理基於下面的公式16~3 = 4096 = 64~2。步驟S304的具體壓縮算法為(1)首先用64個字符來描述64進位數值,這64個字符為「#$0123456789ABCDEre HIJKLMNOPQRSTUVWXYZabcdefghizklmnopqrstuvwxyz」,這 64 個字符按照 ASCII 碼的順序進 行排列,以保證產生的ID排序結果跟UUID —致;(2)把16進位的三個字符轉化為10進位的數字,轉化後的數值範圍是0 16~3, 即0 4096。(3)根據第(2)步產生的數字,產生長度為2個字符的64進位的字符串。下面通過一個例子來說明這個算法的具體實現過程步驟1 :JAVA語言的JDK1. 5版本提供了一個通用的產生UUID的工具類,我們通過這個方法java. util. UUID. randomUUID . toString 來產生一個ID字符串,假如生成的 ID 為a3797f94-4428-4a4f-b9f3-290c3dc05d7e ;步驟2 將第一步產生的字符串去掉「-」,產生中間結果字符串a3797f9444284a4 fb9f3290c3dc05d7e ;步驟3 將第二步產生的字符串分成十一組,分組結果為
權利要求
一種識別碼生成方法,其特徵在於,包括步驟S102,根據通用唯一識別碼通用算法生成第一長度的第一字符串;步驟S104,去除所述第一字符串中的連結符,將所述第一長度的所述第一字符串變為第二長度的第二字符串;步驟S106,將所述第二長度的所述第二字符串中的字符進行分組、壓縮,並將壓縮後的字符進行拼接,生成第三長度的第三字符串,其中,所述第三字符串為識別碼。
2.根據權利要求1所述的識別碼生成方法,其特徵在於,在所述步驟S102中,所述第一 長度為36個字符。
3.根據權利要求2所述的識別碼生成方法,其特徵在於,在所述步驟S104中,所述連結 符為「_」。
4.根據權利要求3所述的識別碼生成方法,其特徵在於,所述第二長度為32個字符,第 三長度為22個字符,所述步驟S106具體為步驟S1062,將所述32個字符分成11組,其中,第1組為2個字符,其餘10組分別為3 個字符;步驟S1064,將第2組至第11組的字符串分別進行壓縮,使用壓縮算法將每組由3個字 符壓縮為2個字符;步驟S1066,將所述第1組的2個字符與所述第2組至第11組的壓縮後的字符進行拼 接,生成長度為22個字符的第三字符串。
5.根據權利要求4所述的識別碼生成方法,其特徵在於,所述壓縮算法具體為將3位 16進位的字符串轉化為2位64進位的字符串,所述步驟S1064具體為使用64個字符來描述64進位數值,其中所述64個字符包括#$0123456789ABCDEFGH IJKLMNOPQRSTUVWXYZabcdefghi jklmnopqrstuvwxyz,所述 64 個字符按照 ASCII 碼的順序進 行排列;將16進位的三個字符傳化成10進位的數字,轉化後的數值範圍為0至163 ;根據上述10進位的數字,產生長度為2個字符的64進位的字符串。
6.一種識別碼生成系統,其特徵在於,包括第一字符串生成模塊,根據通用唯一識別碼通用算法生成第一長度的第一字符串;第二字符串生成模塊,去除所述第一字符串中的連結符,將所述第一長度的所述第一 字符串變為第二長度的第二字符串;第三字符串生成模塊,將所述第二長度的所述第二字符串中的字符進行分組、壓縮,並 將壓縮後的字符進行拼接,生成第三長度的第三字符串,其中,所述第三字符串為識別碼。
7.根據權利要求6所述的識別碼生成系統,其特徵在於,所述第一長度為36個字符,所 述連結符為「_」 ;所述第二長度為32個字符,第三長度為22個字符。
8.根據權利要求7所述的識別碼生成系統,其特徵在於,第三字符串生成模塊包括分組模塊,將所述32個字符分成11組,其中,第1組為2個字符,其餘10組分別為3個字符;壓縮模塊,將第2組至第11組的字符串分別進行壓縮,使用壓縮算法將每組由3個字 符壓縮為2個字符;拼接模塊,將所述第1組的2個字符與所述第2組至第11組的壓縮後的字符進行拼接,生成長度為22個字符的第三字符串。
9.根據權利要求8所述的識別碼生成系統,其特徵在於,所述壓縮算法具體為將3位 16進位的字符串轉化為2位64進位的字符串。
全文摘要
本發明提出了一種識別碼生成方法,包括步驟S102,根據通用唯一識別碼通用算法生成第一長度的第一字符串;步驟S104,去除所述第一字符串中的連結符,將所述第一長度的所述第一字符串變為第二長度的第二字符串;步驟S106,將所述第二長度的所述第二字符串中的字符進行分組、壓縮,並將壓縮後的字符進行拼接,生成第三長度的第三字符串,其中,所述第三字符串為識別碼。本發明還提出了一種識別碼生成系統。根據本發明的技術方案,可以實現一種識別碼生成方法和系統,既能夠保證在分布式系統產生的識別碼具有唯一性,又能夠有效的降低識別碼所佔的字節數,節約存儲空間,保證數據存儲的效率,不至於增加太多的網絡流量。
文檔編號G06F17/30GK101976241SQ201010291998
公開日2011年2月16日 申請日期2010年9月26日 優先權日2010年9月26日
發明者王雲波 申請人:用友軟體股份有限公司