java 生成20位唯一ID,生成不會重複的20位數字

由於開發的需要,需要生成20位的長度的數字組成的id,首先要滿足唯一性,那樣的話就需要使用到時間戳來生成,java生成的時間戳是毫秒級的,理論上還是會發生產生相同的id,這是一件很頭疼的一件事。

1、解決思路一:

在生成的13位長度的時間戳上面加上3位的自曾數

 

2017+1492764117143+XXX

代碼如下:

 

        package my;
	import java.text.SimpleDateFormat;
	/**
	 * 獲取20位隨機數 
	 * 4位年份+13位時間戳+3位隨機數
	 * @author yuyu
	 */
	public class GetTime {
		public static void main(String[] args) {
			//調用生成id方法
			System.out.println(getGuid()); 
		}
		
		/**
		 * 20位末尾的數字id
		 */
		public static volitale int Guid=100;

		public static String getGuid() {
			
			GetTime.Guid+=1;

			long now = System.currentTimeMillis();  
			//獲取4位年份數字  
			SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy");  
			//獲取時間戳  
			String time=dateFormat.format(now);
			String info=now+"";
			//獲取三位隨機數  
			//int ran=(int) ((Math.random()*9+1)*100); 
			//要是一段時間內的數據連過大會有重複的情況,所以做以下修改
			int ran=0;
			if(GetTime.Guid>999){
				GetTime.Guid=100;    	
			}
			ran=GetTime.Guid;
					
			return time+info.substring(2, info.length())+ran;  
		}
}

 

輸出如下:

 

20171492765221643100
20171492765422922101
20171492765429776102

*但是這樣還是會有重複調用的時候隨機數一樣的情況,但是這樣的概率會很小很小,但是理論上是有可能出現的,但在實際開發中不會達到如此高的運行速度,這樣產生的id也是可以唯一的

 

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