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 ("-", ");//带"-"