Python uuid4,如何限制唯一字符的长度

17 投票
3 回答
32554 浏览
提问于 2025-04-18 13:39

在Python中,我正在使用uuid4()这个方法来生成一个独特的字符集。但是我找不到办法把这个字符限制在10个或8个字符以内。有没有什么方法可以做到?

uuid4()

ffc69c1b-9d87-4c19-8dac-c09ca857e3fc

谢谢。

3 个回答

1

之前的回答没有提供一个UUID,可能是因为他们把字符串截断了,或者根本没有生成UUID。根据文档,如果你截断了字符串,“这些ID就不再是全球唯一的了[...]”,而且文档中提到的ShortUUID().random()是用来生成一个安全的字符串,而不是UUID。

不过,你可以通过改变字母表中的字符数量间接地改变UUID的长度。在ShortUUID.encoded_length()的实现中,你可以看到UUID的长度是int(math.ceil(16 * math.log(256) / math.log(len(alphabet))))。你可以通过shortuuid.set_alphabet()来改变字母表。

字母表中的字符越多,UUID就可以越短,同时仍然保持唯一性。

13

你可以使用shortuuid这个包。

pip install shortuuid

这样的话,它就和UUID包差不多了。

import shortuuid
shortuuid.uuid()

输出结果

'vytxeTZskVKR7C7WgdSP3d'

自定义长度的UUID

shortuuid.ShortUUID().random(length=22)

输出结果

'RaF56o2r58hTKT7AYS9doj'

来源 - https://pypi.org/project/shortuuid/

14

然后你可以使用 shortuuid 来生成一个简短的 UUID:

import shortuuid
shortuuid.uuid()
'vytxeTZskVKR7C7WgdSP3d'

原生解决方案,但碰撞风险很大:

试试:

x = uuid4()
str(x)[:8]

输出结果:

"ffc69c1b"

我如何在 Python 中获取字符串的子串?

撰写回答