java 唯一ID生成

jiqingluoye 发布于 2014/08/02 11:26
阅读 16K+
收藏 2

    最近一个项目里面涉及业务流水唯一ID(要求数字字符串)的生成,原来采用的方式是时间戳+两位随机码,后来发现数据中也会有重复的数据,现在暂用的方法是匹配两次的编码是否相同,相同的话追加一个自增长的数字,代码如下(已省略业务编码部分):

private static String beforeBh;
private static String beforeNum;

public static String codeGenerate() {
  Date now = new Date();
  String behind = now.getTime()+"";
  if(beforeBh==null) {
   beforeBh = behind;
  } else if(beforeBh.equals(behind)) {
   behind = behind +beforeNum;
   beforeNum++;
  } else {
   beforeBh = behind;
   beforeNum = 0;
  }
  return behind;
 }

可以先不考虑编码长度,不过长度越短越好,希望各位大神给指点指点或者提出更好的方法

以下是问题补充:

@jiqingluoye:UUID转成的数字长度会在17~20之间浮动,不是稳定的 最好提供下10位长度的思路 这是私人问题,希望各位喷友给出给力方案后再来喷,谢谢 (2014/08/02 14:30)
加载中
1
pantrick
pantrick
UUID+本机mac这样并发也不会重复吧
jiqingluoye
jiqingluoye
uuid生成的是64位或128位,还能处理成更短的吗?
1
TrulyBelieve
TrulyBelieve

参考mongoDB的ObjectId,采用时间戳+硬件hash+随机数

可以解决不同机器上生成唯一码

宋鑫001
宋鑫001
回复 @jiqingluoye : Object id = ObjectId.get();
TrulyBelieve
TrulyBelieve
回复 @jiqingluoye : 我在android上用,各个手机终端自己生成id,都不用问后台,至少现在没出乱子。
TrulyBelieve
TrulyBelieve
回复 @jiqingluoye : 下载mongodb的java驱动源码,可以看到ObjectId很独立,可以抠出来用。
jiqingluoye
jiqingluoye
能提供个通用的方法吗?
0
调皮的XD
调皮的XD
UUID 这么简单
调皮的XD
调皮的XD
System.out.println(UUID.randomUUID().toString().replaceAll("-","").length()); 32位了
jiqingluoye
jiqingluoye
uuid生成的是64位或128位,还能处理成更短的吗?
0
高效码农
高效码农
UUID.randomUUID().toString()
0
掠水
掠水
贵公司有点搞笑
jiqingluoye
jiqingluoye
大神,能告诉我京东神马的电商订单号怎么弄的吗,十位唯一ID,菜鸟求解
0
婕仪伟琪
婕仪伟琪

通问,我的帖子在:这里

呵呵

jiqingluoye
jiqingluoye
看来我同问了,哈……你可以看下我转的这片博客,对我这菜鸟还是有用的 http://my.oschina.net/u/1378772/blog/297436
0
工号1024
工号1024
UUID,取MD5,的16位,可以参考
jiqingluoye
jiqingluoye
嗯,这种方式我在搜贴的时候看到过,不过通过这种方式感觉很奇怪……哈哈,不过还是谢谢,至少这种重复几率可以无视了
0
御风林海
御风林海
路过,吸收经验
0
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
推特有个php扩展叫ukey可以看下源码学习下
返回顶部
顶部