有没有办法生成一个随机的UUID,它只包含数字?

Java的UUID类生成随机UUID。 但这包括字母和数字。 对于某些应用,我们只需要数字。 有没有办法生成只包含Java中的数字的随机UUID?

UUID.randomUUID(); 

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

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

在这种情况下,左边填充40个零…

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

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

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

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

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

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

对于记录:UUID实际上是128位数。

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

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

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

Random并非普遍独特。 如果你想使用UUIDs而不是其他人建议的Random类,你可以简单地使用正则表达式去除UUID中除数字之外的所有内容。 尝试这样的事情,

String id = UUID.randomUUID().toString().replaceAll("[^0-9]", "");

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

String uuid = UUID.randomUUID()。toString()。replaceAll(“ – ”,“”); //带子 ‘-‘