可以安全地去掉UUID的一部分字节并仍然保持其唯一性吗?

4 投票
2 回答
605 浏览
提问于 2025-04-16 09:39

我写了一个模块,可以把UUID编码成任意进制:

http://pypi.python.org/pypi/shortuuid/

这个模块可以把UUID缩短到22个符号,同时保持唯一性。不过,我在想,能删掉多少个数字,同时还能最大限度地保持唯一性。

UUID的每个数字都是一样随机/唯一的吗?还是说有些数字比其他数字更随机?比如,如果前面的几个数字是某台机器或某个应用的特定标识,那显然它们就没有后面的数字那么随机。我在实验中没有发现这样的情况,但在给别人建议之前,我想确认一下。

如果我把它缩短到8个数字,碰撞的概率是1/57^8吗?还是说这些数字的概率并不均匀?

2 个回答

1

看起来这要看你使用的是哪个版本。从第3版开始,事情应该就变得比较随机了。

http://en.wikipedia.org/wiki/Universally_unique_identifier

4

UUID的构造方式决定了它的版本很重要。确实,有些版本的UUID会比其他版本更随机。

一种解决这个问题的方法是对UUID进行哈希处理,比如使用sha256。这样得到的哈希值应该是比较均匀分布的。

请注意,我这里没有做非常深入的分析。我的回答大致上是对的,但不能保证完全正确。

撰写回答