一種產生標識符的方法
2023-06-15 05:06:11 4
專利名稱:一種產生標識符的方法
技術領域:
本發明涉及通信領域的標識符產生技術,特別涉及一種產生標識符的方法。
背景技術:
在通信技術領域中,標識符(ID)的應用非常廣泛。例如電話卡、充值卡或銀行卡等各種卡的卡號都是一個ID,用於唯一標識一張卡;電話會議接入碼、網絡會議接入碼等也都是一個ID,用於唯一標識一個電話會議或網絡會議。上述各種ID應滿足以下要求1、ID為數字的組合,使用戶能夠在通信終端上輸入。
2、ID具有唯一性,一個ID只能標識一個對象,不能與已有的ID重複。
3、ID具有隨機性,每次產生的ID沒有任何規律,任何人任何時候都不能通過已知的ID,推導出新產生的ID。
4、ID具有長度可配置性,用戶可根據被標識對象數量的變化來配置ID的長度。
現有技術中,一般利用以下兩種方式來產生滿足上述要求的ID一種是利用每位隨機並組合的方式;另一種是利用系統當前時間戳與隨機數組合的方式。
其中,利用每位隨機並組合的方式產生ID的原理如下如果要產生一個N位的ID,則對於N位中每一位分別產生
之間的隨機數,將產生的隨機數組合在一起形成一個N位的ID,然後判斷已有的ID中是否包含有新產生的這個ID,如果有,則說明新產生的ID與已有的ID重複,需要再次產生一個ID,直至新產生的ID與已有的ID不重複為止。
利用系統當前時間戳與隨機數組合的方式產生ID的原理如下計算機程式語言可以提供獲取系統當前時間戳的方法及產生隨機數的隨機函數,利用計算機程式語言提供的獲取系統當前時間戳的方法獲取系統的當前時間戳,利用計算機程式語言提供的產生隨機數的隨機函數產生一個一位或幾位的隨機數,然後將獲取的時間戳設置在高位,將產生的隨機數設置在低位,二者組合在一起形成一個ID。
這裡,利用計算機程式語言提供的獲取系統當前時間戳的方法所獲取的系統當前時間戳,一般是從1970年1月1日0時0分0秒起到現在某一時刻所經過的秒數,該秒數在計算機中一般用4位元組的整型數來存儲。
對於第一種產生ID的方式而言,雖然產生的ID滿足全部數字、唯一、隨機和長度可配置的要求,但是已有ID的數量越多,已有ID中包含有新產生的ID的概率就越大,對於新產生的ID包含在已有ID的情況,又要重新生成ID,……,如此反覆,產生ID的效率很低,無法滿足一些對產生ID的效率要求高的場合。
對於第二種產生ID的方式而言,由於在現有的計算機系統中,時間戳一般使用四字節的整型數來表示,其長度已達到10個字符,如果在其後再加上一個一位或幾位的隨機數,將導致產生ID的位數過長,不能很好地滿足用戶根據被標識對象數量的變化來配置ID長度的要求。另外,由於利用隨機函數產生的隨機數是可能發生重複的,如果每秒鐘允許產生多個ID,則產生的ID就可能發生重複,這樣仍需要同第一種產生ID的方式一樣,判斷新產生的ID是否重複,所以第二種產生ID的方式限制了每秒鐘只能產生一個ID,顯然無法滿足大數據量業務應用的要求。
發明內容
有鑑於此,本發明的主要目的在於提供一種產生ID的方法,以提高產生滿足全部數字、唯一、隨機和長度可配置要求ID的效率,並滿足大數據量業務應用的要求。
為達到上述目的,本發明提供了一種產生ID的方法,包括以下步驟A、配置ID的取值範圍,根據ID的可用性劃分ID的取值區間;
B、在所劃分的任意一個取值區間中任取一個ID作為新產生的ID。
上述方案中,步驟A中所述的根據ID的可用性劃分ID的取值區間為在配置的ID的取值範圍中根據所有已用的ID確定當前所有可用的ID,將當前所有可用的ID劃分為ID值連續的至少一個取值區間。
上述方案中,所述的步驟B包括B1、對所劃分的所有取值區間進行編號;B2、利用隨機函數產生編號數目範圍內的一個隨機數,選擇編號與產生的隨機數相同的取值區間,判斷所選擇用於產生ID的取值區間內ID的個數,如果該取值區間內只有一個ID,則取該ID作為新產生的ID;如果該取值區間內有一個以上的ID,則執行步驟B3;B3、利用隨機函數產生該取值區間中ID數目範圍內的一個隨機數,取該取值區間中與該隨機數對應的ID作為新產生的ID。
上述方案中,所述ID需產生多個,該方法進一步包括根據ID的可用性更新ID的取值區間,在更新後的任意一個取值區間中任取一個ID作為新產生的ID。
上述方案中,所述產生上一個ID時選擇用於產生ID的取值區間內只有一個ID;所述更新ID的取值區間為刪除該取值區間,並對剩餘的取值區間重新編號。
上述方案中,所述產生上一個ID時選擇用於產生ID的取值區間內有一個以上的ID,且將該取值區間的一個邊界ID作為新產生的ID;所述更新ID的取值區間為刪除該取值區間中作為新產生ID的邊界ID,更新該取值區間。
上述方案中,所述產生上一個ID時選擇用於產生ID的取值區間內有一個以上的ID,且將該取值區間的一個非邊界ID作為新產生的ID;所述更新ID的取值區間為刪除該取值區間中作為新產生ID的非邊界ID,將該取值區間劃分為兩個取值區間,並對所有取值區間重新編號。
因此,本發明提供的這種產生ID的方法,通過配置ID的取值範圍,根據ID的可用性劃分ID的取值區間,並利用隨機函數在所劃分的任意一個取值區間中任取一個ID作為新產生的ID,能夠產生滿足全部數字、唯一、隨機和長度可配置要求的ID。
利用本發明,由於ID的取值範圍可以由用戶根據實際需要來配置,設定ID的最大值和最小值,所以能夠保證產生的ID為全部數字且長度可配置的ID。在需要產生多個ID時,由於每次產生ID後都要更新ID的取值區間,使每次都在未用ID的範圍內產生ID,所以能夠保證產生ID的唯一性。由於本發明是利用隨機函數來隨機選擇產生ID的取值區間,並在該取值區間中利用隨機函數來隨機選擇一個ID作為產生的ID,所以能夠在最大程度上保證產生ID的隨機性。因此,本發明能夠產生滿足全部數字、唯一、隨機和長度可配置要求的ID。
由於每次都在未用ID的範圍內產生ID,保證產生的ID滿足唯一性要求,在產生ID時不必判斷產生的ID是否會發生重複,所以大大提高了產生滿足全部數字、唯一、隨機和長度可配置要求ID的效率。
由於產生滿足全部數字、唯一、隨機和長度可配置要求的ID與計算機系統的當前時間戳無關,在單位時間內可以產生大量滿足要求的ID,所以能夠滿足大數據量業務應用的要求。
圖1為本發明產生ID總體技術方案的實現流程圖;圖2為本發明一個實施例中產生ID的方法流程圖。
具體實施例方式
為使本發明的目的、技術方案和優點更加清楚明白,以下舉實施例,並參照附圖,對本發明進一步詳細說明。
本發明的核心內容是通過配置ID的取值範圍,根據ID的可用性劃分ID的取值區間,並利用隨機函數在所劃分的任意一個取值區間中任取一個ID作為新產生的ID,能夠產生滿足全部數字、唯一、隨機和長度可配置要求的ID。
如圖1所示,圖1為本發明產生ID總體技術方案的實現流程圖,該方法包括以下步驟步驟101配置ID的取值範圍,根據ID的可用性劃分ID的取值區間;步驟102在所劃分的任意一個取值區間中任取一個ID作為新產生的ID。
在上述步驟101中,所述配置ID的取值範圍是用戶根據實際需要設定ID的最大值和最小值進行的。例如,如果用戶根據實際需要希望ID的長度為5,則可以設定ID的最小值為10000,設定ID的最大值為99999,將ID的取值範圍配置為[10000,99999]。
所述根據ID的可用性劃分ID的取值區間,是在配置的ID的取值範圍中根據所有已用的ID確定當前所有可用的ID,將當前所有可用的ID劃分為ID值連續的至少一個取值區間。
例如,如果配置的ID的取值範圍為[10000,99999],假設在該取值範圍中沒有已用的ID,所有的ID都是可用的ID,則將所有可用的ID劃分為ID值連續的取值區間為[10000,99999]。假設在該取值範圍中10010、11001、25001、33001、52002、68005和95608為全部已用的ID,為了保證產生的ID與已用的ID不發生重複,將ID的取值範圍[10000,99999]劃分為[10000,10009]、[10011,11000]、[11002,25000]、[25002,33000]、[33002,52001]、[52003,68004]、[68006,95607]和[95609,99999]幾個ID值連續的取值區間。
在上述步驟102中,所述在所劃分的任意一個取值區間中任取一個ID作為新產生的ID包括先對所劃分的所有取值區間進行編號,然後利用隨機函數產生編號數目範圍內的一個隨機數,選擇編號與產生的隨機數相同的取值區間,判斷該取值區間內ID的個數,如果該取值區間內只有一個ID,則取該ID作為新產生的ID;如果該取值區間內有一個以上的ID,則利用隨機函數產生該取值區間中ID數目範圍內的一個隨機數,取該取值區間中與該隨機數對應的ID作為新產生的ID。
利用上述產生ID的方法,可以產生一個滿足全部數字、唯一、隨機和長度可配置要求的ID。如果需要產生多個滿足全部數字、唯一、隨機和長度可配置要求的ID,該方法進一步包括根據ID的可用性更新ID的取值區間,在更新後的任意一個取值區間中任取一個ID作為新產生的ID。其中,所述根據ID的可用性更新ID的取值區間包括以下幾種情況情況1、如果步驟102中利用隨機函數選擇的取值區間內只有一個ID,則取該ID作為新產生的ID後,該ID就成為已用的ID,為了保證在下一次產生ID時不會產生與該ID重複的ID,需要將該取值區間直接刪除,並對剩餘的取值區間重新編號,實現對ID取值區間的更新。
情況2、如果步驟102中利用隨機函數選擇的取值區間內有一個以上的ID,則利用隨機函數在該取值區間中任意選取一個ID作為新產生的ID後,選取的這個ID就成為已用的ID,為了保證在下一次產生ID時不會產生與該ID重複的ID,需要將取值區間中的這個ID刪除,實現對ID取值區間的更新。此時又有兩種情形情形a、如果在選擇的取值區間中將取值區間的一個邊界ID作為新產生的ID,則直接刪除該取值區間中作為新產生ID的邊界ID,即可實現對ID取值區間的更新;情形b、如果在選擇的取值區間中將取值區間的一個非邊界ID作為新產生的ID,則刪除該取值區間中作為新產生ID的非邊界ID,同時將該取值區間劃分為兩個取值區間,並對所有的取值區間重新編號。
為了能夠更加清楚地說明本發明提供的這種產生ID的方法,以下結合一個具體的實施例,並參照附圖對此進行詳細說明。
如圖2所示,圖2為本發明一個實施例中產生ID的方法流程圖。在本實施例中需要產生多個ID,假設用戶根據實際需要配置的ID的取值範圍為
,在該取值範圍內已用的ID為3、5、6、7、12、14和55,該方法包括以下步驟步驟201為了保證產生的ID與已用的ID不發生重複,根據配置的ID的取值範圍
,以及已用的ID 3、5、6、7、12、14和55,將ID的取值範圍
劃分為
、[4,4]、[8,11]、[13,13]、[15,54]、[56,2147483648]等ID值連續的取值區間。
步驟202對劃分的取值區間
、[4,4]、[8,11]、[13,13]、[15,54]、[56,2147483648]進行編號,得到表1。
表1步驟203利用隨機函數產生編號數目範圍
內的一個隨機數,選擇編號與產生的隨機數相同的取值區間。
步驟204判斷選擇的用於產生ID的取值區間內ID的個數,如果所選擇的取值區間內只有一個ID,則執行步驟205;如果所選擇的取值區間內有一個以上的ID,則執行步驟206。
步驟205取該取值區間內的ID作為新產生的ID,更新表1所述ID的取值區間,然後執行步驟207。
例如,如果利用隨機函數產生編號數目範圍
內的隨機數為3,則選擇編號為3的取值區間[13,13]作為用於產生ID的取值區間,由於該取值區間中只有一個ID 13,則將13作為新產生的ID;在產生該ID後,直接刪除編號為3的取值區間,並對剩餘的取值區間重新編號,更新後的取值區間如表2所示。
表2
步驟206利用隨機函數產生所選擇的取值區間中ID數目範圍內的一個隨機數,取該取值區間中與該隨機數對應的ID作為新產生的ID,並更新ID的取值區間。
例如,如果利用隨機函數產生編號數目範圍
內的隨機數為4,則選擇編號為4的取值區間[15,54]為產生ID的取值區間,由於該取值區間中有40個ID,則利用隨機函數產生該取值區間中ID數目範圍
內的一個隨機數。
此時,如果利用隨機函數產生該取值區間中ID數目範圍
內的隨機數為0,則將取該取值區間中與該隨機數0對應的ID作為新產生的ID,這裡由於與該隨機數0對應的ID為15,即開始區間值15+隨機數值0=15,所以將15作為新產生的ID;在產生該ID後,刪除該取值區間[15,54]中作為新產生ID的邊界ID 15,更新該取值區間為[16,54],更新後的取值區間如表3所示。
表3如果利用隨機函數產生該取值區間中ID數目範圍
內的隨機數為12,則將取該取值區間中與該隨機數12對應的ID作為新產生的ID,這裡由於與該隨機數12對應的ID為27,即開始區間值15+隨機數值12=27,所以將27作為新產生的ID;在產生該ID後,刪除該取值區間[15,54]中作為新產生ID的非邊界ID 27,將該取值區間[15,54]劃分為兩個取值區間[15,26]和[28,54],並對所有取值區間重新編號,更新後的取值區間如表4所示。
表4步驟207在更新後的ID的取值區間中,重複執行步驟203~206,產生下一個滿足要求的ID,如此反覆多次,可以產生多個滿足要求的ID。
以上所述的具體實施例,對本發明的目的、技術方案和有益效果進行了進一步詳細說明,所應理解的是,以上所述僅為本發明的具體實施例而已,並不用於限制本發明,凡在本發明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發明的保護範圍之內。
權利要求
1.一種產生標識符的方法,其特徵在於,包括以下步驟A、配置標識符ID的取值範圍,根據ID的可用性劃分ID的取值區間;B、在所劃分的任意一個取值區間中任取一個ID作為新產生的ID。
2.根據權利要求1所述的方法,其特徵在於,步驟A中所述的根據ID的可用性劃分ID的取值區間為在配置的ID的取值範圍中根據所有已用的ID確定當前所有可用的ID,將當前所有可用的ID劃分為ID值連續的至少一個取值區間。
3.根據權利要求1所述的方法,其特徵在於,所述的步驟B包括B1、對所劃分的所有取值區間進行編號;B2、利用隨機函數產生編號數目範圍內的一個隨機數,選擇編號與產生的隨機數相同的取值區間,判斷所選擇用於產生ID的取值區間內ID的個數,如果該取值區間內只有一個ID,則取該ID作為新產生的ID;如果該取值區間內有一個以上的ID,則執行步驟B3;B3、利用隨機函數產生該取值區間中ID數目範圍內的一個隨機數,取該取值區間中與該隨機數對應的ID作為新產生的ID。
4.根據權利要求3所述的方法,其特徵在於,所述ID需產生多個,該方法進一步包括根據ID的可用性更新ID的取值區間,在更新後的任意一個取值區間中任取一個ID作為新產生的ID。
5.根據權利要求4所述的方法,其特徵在於,所述產生上一個ID時選擇用於產生ID的取值區間內只有一個ID;所述更新ID的取值區間為刪除該取值區間,並對剩餘的取值區間重新編號。
6.根據權利要求4所述的方法,其特徵在於,所述產生上一個ID時選擇用於產生ID的取值區間內有一個以上的ID,且將該取值區間的一個邊界ID作為新產生的ID;所述更新ID的取值區間為刪除該取值區間中作為新產生ID的邊界ID,更新該取值區間。
7.根據權利要求4所述的方法,其特徵在於,所述產生上一個ID時選擇用於產生ID的取值區間內有一個以上的ID,且將該取值區間的一個非邊界ID作為新產生的ID;所述更新ID的取值區間為刪除該取值區間中作為新產生ID的非邊界ID,將該取值區間劃分為兩個取值區間,並對所有取值區間重新編號。
全文摘要
本發明公開了一種產生ID的方法,包括以下步驟A.配置ID的取值範圍,根據ID的可用性劃分ID的取值區間;B.在所劃分的任意一個取值區間中任取一個ID作為新產生的ID。利用本發明,能夠產生滿足全部數字、唯一、隨機和長度可配置要求的ID,大大提高了產生滿足全部數字、唯一、隨機和長度可配置要求ID的效率,並能夠滿足大數據量業務應用的要求。
文檔編號H04L29/12GK1874357SQ20051011252
公開日2006年12月6日 申請日期2005年9月30日 優先權日2005年9月30日
發明者李陽林 申請人:華為技術有限公司