最有效的方法来生成128个字符长的uuid?

时间:2018-03-20 19:30:26

标签: java

目前,您可以使用以下方法生成随机UUID:

UUID.randomUUID().toString();

这会产生以下字符串:

94f3c8a3-a161-468f-9844-de92dd90ace7

这是36个字符长...太小而无法使用,例如,作为ID持续存在:我预计会发生很多冲突。

我想生成至少 128个char长字符串...通过使用sha512 alg我能够获得更长的字符串但是sha512意味着安全,效率不高。 我可以用什么来获得更长的ID但对性能的影响很小?

1 个答案:

答案 0 :(得分:4)

您的陈述:

  

这是36个字符长...太小而无法使用

除非您正在进行加密,否则

很可能是错误的。根据{{​​3}},这36个字符编码128位值。假设由UUID.randomUUID()方法返回的UUID版本4,进一步引用wiki:

  

与其他UUID一样,有四位   用于表示版本4,以及2或3位表示   变体(分别为变体1和2的10或110)。因此,为   变体1(即大多数UUID)随机版本4 UUID将具有6   预定的变体和版本位,留下122位   随机生成的部分,总共2 ^ 122,或5.3x10 ^ 36(5.3   undecillion)可能的版本4变体1 UUID。

您的代码中极不可能遇到任何冲突。他们可以发生但是:

  

因此,对于十亿分之一的重复机会,103   必须生成万亿版本4 UUID。