Java的UUID类生成随机的UUID。但是这些UUID由字母和数字组成。在某些应用程序中,我们仅需要数字。在Java中是否有一种方法可以生成仅由数字组成的随机UUID?
UUID.randomUUID();
如果你不想要一个随机数,而是带有数字的UUID,请使用:
String lUUID = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16));
在这种情况下,左侧填充了40个零...记录一下:UUID实际上是128位的数字。
你看到的字母数字字符串是使用十六进制数字(0..9A..F)表示该128位数字的形式。
真正的解决方法是将字符串转换为对应的128位数字,并且需要使用两个Longs(Long有64位)来存储它。
UUID uuid = UUID.randomUUID();
String numericUUID = Long.toString(uuid.getMostSignificantBits())
+ Long.toString(uuid.getLeastSignificantBits());
为什么不直接生成随机
数字,然后将其放入所需的格式中?
这样做不能保证唯一性。(即每次生成都需要实现检查和重试逻辑)
而其他解决方案将采用UUID位并将其转换为数字,唯一性更加精细。根据您的用例,您可能仍希望使用此方法检查唯一性。
最简单的方式:
uuid.uuid4().int
调用 hashCode()
方法获取 UUID 的唯一整数。
hashCode()
不是一个可逆函数,不应该用于唯一性。 - Jonathan SchneiderhashCode()
实现将是return 1;
。 - Kevin KrumwiedeString uuid = UUID.randomUUID().toString().replaceAll("-", ""); //去掉“-”