java 生成20位唯一ID,生成不会重复的20位数字

来源:互联网 发布:网络直播的弊端例子 编辑:程序博客网 时间:2024/06/06 16:54

由于开发的需要,需要生成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 * @return */public static int Guid=100;public static String getGuid() {Common.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(Common.Guid>999){Common.Guid=100;    }ran=Common.Guid;return time+info.substring(2, info.length())+ran;  }}


输出如下:

201714927652216431002017149276542292210120171492765429776102
*但是这样还是会有重复调用的时候随机数一样的情况,但是这样的概率会很小很小,但是理论上是有可能出现的,但在实际开发中不会达到如此高的运行速度,这样产生的id也是可以唯一的

1 0
原创粉丝点击