目前,您可以使用以下方法生成随机UUID:
UUID.randomUUID().toString();
这会产生以下字符串:
94f3c8a3-a161-468f-9844-de92dd90ace7
这是36个字符长...太小而无法使用,例如,作为ID持续存在:我预计会发生很多冲突。
我想生成至少 128个char长字符串...通过使用sha512 alg我能够获得更长的字符串但是sha512意味着安全,效率不高。 我可以用什么来获得更长的ID但对性能的影响很小?
答案 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。