Java:唯一的10位数字ID

Magodiez

我需要在Java中生成一个唯一的10位ID。这些是此ID的限制:

  • 仅数字
  • 最多10位数字
  • 每秒最多可以创建10个不同的ID
  • 必须是唯一的(即使应用程序重新启动)
  • 无法在数据库中保存号码
  • 尽快不给系统增加太多延迟

到目前为止,我发现的最佳解决方案是:

private static int inc = 0;

private static long getId(){

    long id = Long.parseLong(String.valueOf(System.currentTimeMillis())
            .substring(1,10)
            .concat(String.valueOf(inc)));
    inc = (inc+1)%10;
    return id;
}

此解决方案具有以下问题:

  • 如果出于任何原因需要每秒钟创建10个以上的ID,则此解决方案将不起作用。
  • 在大约32年内,此ID可以重复(这可能是可以接受的)

还有其他解决方案来创建此ID吗?

我没有想到的其他问题吗?

谢谢你的帮助,

老弯棍

这是对您的一个小改进,但应该具有弹性。

本质上,除非当前时间是自上一个id以来没有打勾的时间,否则我们将使用毫秒为单位,在这种情况下,我们只需返回即可last + 1

private static final long LIMIT = 10000000000L;
private static long last = 0;

public static long getID() {
  // 10 digits.
  long id = System.currentTimeMillis() % LIMIT;
  if ( id <= last ) {
    id = (last + 1) % LIMIT;
  }
  return last = id;
}

因为它应该以相对较短的周期速率每秒管理多达1000个。要延长循环速率(但要缩短分辨率),可以使用(System.currentTimeMillis() / 10) % 10000000000L(System.currentTimeMillis() / 100) % 10000000000L

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Spring唯一ID为具有9位数字的整数-未排序

来自分类Dev

以20位数字的间隔生成唯一且可逆的ID

来自分类Dev

每天生成唯一的6位数字

来自分类Dev

Java将8位数字转换为10位

来自分类Dev

JAVA ISBN-10编号:第10位数字

来自分类Dev

将一列转换为10位数字

来自分类Dev

被截断为64位数字的64位sha1是否保证是唯一的?

来自分类Dev

在int(Java)中检查一位数字

来自分类Dev

在int(Java)中检查一位数字

来自分类Dev

信用卡后4位数字的唯一性如何?

来自分类Dev

如何添加存储在模型中的唯一随机生成的6位数字密钥

来自分类Dev

创建随机的MSISDN 10位数字

来自分类Dev

找出10位数字难题的算法

来自分类Dev

以4或6开头的10位数字

来自分类Dev

附加零以使10位数字

来自分类Dev

要求输入10位数字

来自分类Dev

找出10位数字难题的算法

来自分类Dev

根据一个数字序列生成一个伪唯一数字(代码),该数字在4位数字之内没有重复

来自分类Dev

如何使一位数字?

来自分类Dev

Java检查int的下一位数字是否等于当前数字

来自分类Dev

创建一个唯一的8位数字并将其插入数据库中而不重复

来自分类Dev

Java无法处理32位数字

来自分类Dev

在Java中获得7位数字

来自分类Dev

Excel:如何将一个10位数字格式设置为日期时间

来自分类Dev

sed命令考虑最后一列的前10位数字

来自分类Dev

当数字以一位数字存储在数组中时,如何除以很大的数字(10 ^ 100)

来自分类Dev

为什么Java用科学计数法显示10位数字?

来自分类Dev

从10位数字中获取所有可能的连续4位数字

来自分类Dev

如何生成8位数字的唯一标识符以替换python pandas中的现有标识符

Related 相关文章

热门标签

归档