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

ros*_*osh 17 java random uuid

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

UUID.randomUUID();
Run Code Online (Sandbox Code Playgroud)

Chr*_*ibl 20

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

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

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

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


Jig*_*shi 6

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

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

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


jks*_*der 6

UUID uuid = UUID.randomUUID();
String numericUUID = Long.toString(uuid.getMostSignificantBits())
                   + Long.toString(uuid.getLeastSignificantBits());
Run Code Online (Sandbox Code Playgroud)


foo*_*bar 5

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


Pab*_*zos 5

作为记录:UUID实际上是128位数字。

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

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