Java 有没有办法生成一个只由数字组成的随机UUID?

Java 有没有办法生成一个只由数字组成的随机UUID?,java,random,uuid,Java,Random,Uuid,Java的UUID类生成一个随机UUID。但这是由字母和数字组成的。对于某些应用,我们只需要数字。在Java中,有没有一种方法可以生成只包含数字的随机UUID UUID.randomUUID(); 为什么不直接生成数字并把它转换成你们想要的格式呢 这不会给你带来开箱即用的独特性。(即,您必须对每一代执行检查并重试逻辑) 其中,与其他采用UUID位并将其转换为数字的解决方案一样,UUID位的唯一性将更细粒度。根据您的用例,您可能仍然希望使用此方法检查唯一性。调用UUID上的hashCode()以

Java的UUID类生成一个随机UUID。但这是由字母和数字组成的。对于某些应用,我们只需要数字。在Java中,有没有一种方法可以生成只包含数字的随机UUID

UUID.randomUUID();
为什么不直接生成数字并把它转换成你们想要的格式呢

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


其中,与其他采用UUID位并将其转换为数字的解决方案一样,UUID位的唯一性将更细粒度。根据您的用例,您可能仍然希望使用此方法检查唯一性。

调用UUID上的
hashCode()
以获得唯一整数。

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

String uuid=uuid.randomuid().toString().replaceAll(“-”,”);
//如果您不想要随机数,但UUID仅使用数字,请将“-”条带出来。

String lUUID = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16));
在这种情况下,左填充为40个零

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

UUID:0241008287272164729465721528295504357972

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

< P>记录:UUID实际上是128位数字。
UUID uuid = UUID.randomUUID();
String numericUUID = Long.toString(uuid.getMostSignificantBits())
                   + Long.toString(uuid.getLeastSignificantBits());
您所看到的字母数字字符串是使用十六进制数字(0..9A..F)表示的128位数字

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

最简单的方法是:

uuid.uuid4().int

UUID包括字母。
hashCode()
不是可逆函数。决不能用于唯一性。
hashCode()
的一个性能差但完全正确的实现是
返回1UUID只是一个足够长的随机数,碰撞在天文上是不可能的。它们实际上是唯一的——有一个空间组件(通常等于您拥有的接口的全局唯一MAC)和一个时间组件(来自具有该接口的机器时钟)。因此,只要(a)您的平均UUID生成频率比时钟更新间隔长,(b)您的计时器的同步时间比您从一个背板上拔下接口并将其插入另一台计算机所需的时间要短,以及(c)您具有处理时间倒退的内置设备,它们确实是独一无二的。我没有提到吗@Pheonix如果能解释为什么这样做,而不仅仅是提供代码,那么这个答案会更有帮助:)如何使用UUID和数字来维护插入顺序?@PanupongKongarn请详细说明?你谈论数据库吗?如果是,那么您可以在您选择的数据库中使用附加列(自动递增或序列)。。。