我必须使用整个UUID字符串来保证唯一性吗?

问题描述 投票:0回答:1

我正在Python中使用UUID库来为对象生成唯一的ID。更具体地说,我基本上是在做

id_for_something = uuid.uuid4().hex

我的问题是,我必须使用整个十六进制字符串值来确保ID唯一吗?还是可以使用例如前4位数字?我只是问,因为使用整个字符串似乎有点长。谢谢!

python unique uuid
1个回答
0
投票

UUID是从不保证是唯一的。例如,如果生成2.7 * 10 ^ 18 UUID4,则有50%的机会生成冲突(see wiki)。但是这个数字很大,因此我们很少在意。当然,这是在假设基础随机生成器足够好的前提下进行的。

但是,如果您缩短UUID,则会大大增加该可能性。对于长度为4个字节的UUID(我们称其为SHORTUUID),您有16 ^ 4的组合,这意味着(由于生日悖论),在生成约64k个这样的SHORTUUID之后,您将有超过50%的发生冲突的可能性(see this)。这个数字很低,很低。所以不要。

如果要缩短UUID,那么我建议使用base64编码而不是十六进制。

© www.soinside.com 2019 - 2024. All rights reserved.