如果我使用Long uuid = UUID.randomUUID().getMostSignificantBits()
,发生碰撞的可能性有多大.它切断了最低有效位,所以有可能发生碰撞,对吗?
如果我使用Long uuid = UUID.randomUUID().getMostSignificantBits()
,发生碰撞的可能性有多大.它切断了最低有效位,所以有可能发生碰撞,对吗?
根据the documentation,静电方法UUID.randomUUID()
生成类型4UUID.
这意味着6位用于某些类型信息,其余122位随机分配.
六个非随机位分布在UUID的最高有效一半中有四个,最低有效一半中有两个.因此,UUID中最重要的一半包含60位随机性,这意味着您平均需要生成2^30个UUID才能获得冲突(相比之下,完整UUID需要生成2^61个UUID).
所以我想说你是相当安全的.然而,请注意,正如Carl Seleborg提到的那样,对于其他类型的UUID来说,这绝对不是真的.
顺便说一句,使用UUID的最低有效部分(或者只使用SecureRandom生成随机的长整型)会稍微好一些.