【问题标题】:Is there a way to generate a random UUID, which consists only of numbers?有没有办法生成仅由数字组成的随机 UUID?
【发布时间】:2019-12-25 00:22:15
【问题描述】:

Java 的 UUID 类生成一个随机的 UUID。但这由字母和数字组成。对于某些应用程序,我们只需要数字。有没有办法生成仅由 Java 中的数字组成的随机 UUID?

UUID.randomUUID();

【问题讨论】:

    标签: java random uuid


    【解决方案1】:

    如果您不想要随机数,但只需要带有数字的 UUID,请使用:

    String lUUID = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16));
    

    在这种情况下,左填充为 40 个零...

    结果:
    UUID:b55081fa-9cd1-48c2-95d4-efe2db322a54
    在:
    UUID : 0241008287272164729465721528295504357972

    【讨论】:

    • 如何使用带数字的 UUID 维护插入顺序?
    • @PanupongKongarn 请详细说明?你谈论数据库吗?如果是,那么您可以在您选择的数据库中使用附加列(自动递增或序列)...
    • 如何指定长度?
    【解决方案2】:

    郑重声明:UUID 实际上是 128 位数字。

    您所看到的字母数字字符串是使用十六进制数字 (0..9A..F) 表示的 128 位数字。

    真正的解决方案是将字符串转换为其对应的 128 位数字。要存储它,您需要两个 Long(Long 有 64 位)。

    【讨论】:

      【解决方案3】:

      为什么不直接生成Random 号码并将其转换为您想要的格式?

      这不会给您开箱即用的独特性。 (即您必须对每一代执行检查并重试逻辑)

      其他采用 UUID 位并将其转换为数字的解决方案在唯一性方面将更加精细。根据您的用例,您可能仍希望使用这种方法检查唯一性。

      【讨论】:

      • 我没有提到吗? @pheonix
      【解决方案4】:

      虽然这个问题的原始海报将@Jigar Joshi 的问题标记为最佳答案,但我想补充一点,在某些情况下使用 UUID 而不是随机数是有道理的。不同之处在于 UUID 是(普遍地)唯一的(因此得名),而随机数不是。在生成随机数时,您是否会两次或更频繁地获得相同的数字只是概率问题,但是对于 UUID 永远不会发生这种情况。因此,我认为@Chris Eibl 的回答是最好的。

      【讨论】:

      • UUID 只是一个足够长的随机数,从天文角度来说,碰撞是不可能的。
      • 它们实际上是独一无二的——有一个空间组件(通常等于您拥有的接口的全局唯一 MAC)和一个时间组件(来自具有该接口的机器的时钟)。因此,只要(a)您的平均 UUID 生成频率比您的时钟更新间隔长,并且(b)您的计时器同步时间比您从一个背板拔下接口并将其插入到不同的计算机,并且 (c) 你已经内置了处理时间倒退的规定,它们确实是独一无二的。
      【解决方案5】:
      UUID uuid = UUID.randomUUID();
      String numericUUID = Long.toString(uuid.getMostSignificantBits())
                         + Long.toString(uuid.getLeastSignificantBits());
      

      【讨论】:

      • 我们如何指定它的长度?
      • 我认为 UUID 的长度是固定的。
      【解决方案6】:

      如果您不需要 UUID,为什么要使用 UUID 类?这听起来更像是您只需要一个可以通过使用java.util.Random 类来实现的随机数。

      【讨论】:

        【解决方案7】:

        最简单的方法:

        uuid.uuid4().int
        

        【讨论】:

        • 这个答案如果能解释为什么这会更有用,而不是仅仅提供代码:)
        【解决方案8】:

        在 UUID 上调用 hashCode() 以获取唯一整数。

        【讨论】:

        • hashCode() 不是可逆函数。永远不应该用于唯一性。
        • hashCode() 的性能不佳但完全正确的实现将是 return 1;
        【解决方案9】:

        String uuid = UUID.randomUUID().toString().replaceAll("-", ""); //带'-'

        【讨论】:

        • UUID 包括字母。
        猜你喜欢
        • 1970-01-01
        • 2021-06-24
        • 2019-04-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-11
        • 1970-01-01
        • 2015-05-05
        • 1970-01-01
        相关资源
        最近更新 更多