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

时间:2011-11-11 10:57:26

标签: java random uuid

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

UUID.randomUUID();

10 个答案:

答案 0 :(得分:16)

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

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

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

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

答案 1 :(得分:6)

为什么不只生成Random数字并将其设置为您想要的格式?

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

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

答案 2 :(得分:5)

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

答案 3 :(得分:3)

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

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

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

答案 6 :(得分:-1)

setContentView(R.layout.activity_show_second); textView = (TextView)findViewById(R.id.textViewdata); textView.setText(message); 并非普遍独特。如果你想使用Random而不是其他人建议的Random类,你可以简单地使用正则表达式去除UUID中除数字之外的所有内容。试试这样的事情,

UUIDs

答案 7 :(得分:-1)

最简单的方法:

uuid.uuid4().int

答案 8 :(得分:-3)

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

答案 9 :(得分:-5)

String uuid = UUID.randomUUID()。toString()。replaceAll(“ - ”,“”); // strips' - '