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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章