Sea*_*ala 0 python uuid unique
我在 Python 中使用 UUID 库为对象生成唯一 ID。更具体地说,我基本上是在做
id_for_something = uuid.uuid4().hex
Run Code Online (Sandbox Code Playgroud)
我的问题是,我是否必须使用整个十六进制字符串值来保证 ID 是唯一的?或者可以使用例如前 4 位数字吗?我只是问,因为使用整个字符串似乎有点长。谢谢!
UUID永远不能保证是唯一的。例如,如果您生成 2.7 * 10^18 UUID4,那么您有 50% 的机会产生碰撞(请参阅 wiki)。但是这个数字很大,所以我们很少关心它。这当然是在基础随机生成器足够好的假设下进行的。
但是,如果您缩短 UUID,则会大大增加该概率。对于长度为 4 字节的 UUID(我们称之为 SHORTUUID),您有 16^4 种组合,这意味着(由于生日悖论)在生成约 65k 这样的 SHORTUUID 后,您将有超过 50% 的碰撞概率(请参阅此内容并注意 4 字节UUID 与 32 位整数相同)。这个数字很低,就像低得可怜。实际上情况变得更糟,因为并非整个 UUID4 都是随机的。
因此,如果您关心碰撞,请不要这样做。
如果你想缩短 UUID,我建议使用 base64 编码而不是十六进制。