Java 生成128个字符长uuid的最有效方法?
目前,您可以使用以下方法生成随机UUID:Java 生成128个字符长uuid的最有效方法?,java,Java,目前,您可以使用以下方法生成随机UUID: UUID.randomUUID().toString(); 这将产生以下字符串: 94f3c8a3-a161-468f-9844-de92dd90ace7 它是36个字符长的…太小了,不能作为一个ID来使用,例如,我希望会有很多冲突 我想生成至少128个字符长的字符串…通过使用sha512 alg,我可以获得更长的字符串,但sha512是安全的,不是高效的。 我可以使用什么来获得更长的ID,但对性能的影响较小?您的声明: 这是36个字符长…太小,无
UUID.randomUUID().toString();
这将产生以下字符串:
94f3c8a3-a161-468f-9844-de92dd90ace7
它是36个字符长的…太小了,不能作为一个ID来使用,例如,我希望会有很多冲突 我想生成至少128个字符长的字符串…通过使用sha512 alg,我可以获得更长的字符串,但sha512是安全的,不是高效的。 我可以使用什么来获得更长的ID,但对性能的影响较小?您的声明: 这是36个字符长…太小,无法使用 很可能是不正确的,除非您正在进行加密。这36个字符按照编码128位值。假设UUID版本4由
UUID.randomUUID()
方法返回,进一步引用wiki:
与其他UUID一样,四位
用于指示版本4,2或3位用于指示
变量(变量1和变量2分别为10或110)。因此
变体1(即大多数UUID)随机版本4的UUID将有6个
预定的变体和版本位,为
随机生成的零件,总计为2^122或5.3x10^36(5.3
未确定)可能的版本4变体1 UUID
您极不可能在代码中遇到任何冲突。它们可能发生,但:
因此,如果有十亿分之一的复制机会,103
必须生成版本4的UUID
为什么不获取几个UUID并连接起来呢?“太小了,不能用作持久化的ID。”真的吗?你以为会有很多碰撞?那你就想错了。只是为了有帮助的阅读,我投票以离题的方式结束这个问题,因为它是基于作者的误解,即UUID在某种程度上容易发生冲突。这个问题的作者误解了s,并且误解了数字的范围是128位(或122位)。至于大,读或读。虽然正确生成的版本4 UUID对于大多数目的来说已经足够好了,但如果您想消除任何实际的冲突可能性,请使用版本1。您可以从Java库、本机代码或数据库或web服务中获得这些信息。我想说的是,“您的代码中不太可能发生任何冲突。”此外,为了有效消除任何冲突的可能性,请使用基于时间和空间的版本1值,而不是基于随机的版本4。添加极端部分,这使它更清楚,谢谢。