是否有一种方法可以生成一个随机的UUID,它只由数字组成



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

UUID.randomUUID();

如果你不想要一个随机数,而是一个只有数字的UUID,使用:

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

在本例中左填充为40个零…

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

说明:uuid实际上是128位的数字。

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

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

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

这不会让你与众不同。(也就是说,你必须实现对每一代的检查和重试逻辑)

而其他采用UUID位并将其转换为数字的解决方案在唯一性上将更具颗粒性。根据您的使用情况,您可能仍然希望使用这种方法检查惟一性。

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

UUID uuid = UUID.randomUUID();
String numericUUID = Long.toString(uuid.getMostSignificantBits())
                   + Long.toString(uuid.getLeastSignificantBits());

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

最简单的方法:
uuid.uuid4().int

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

String uuid = uuid . randomuuid (). tostring()。replaceAll ("-", ");//带"-"

最新更新