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

16
在Python中,我正在使用uuid4()方法创建一个唯一的字符集。但是我找不到一种方法来将其限制在10或8个字符。是否有任何方法? uuid4() ffc69c1b-9d87-4c19-8dac-c09ca857e3fc 谢谢。

3
我认为这是UUID的标准格式。如果您想将其更改为10或8个字符,则可以将其视为字符串并仅获取前10个字符。 - Nilesh
3个回答

14

1
你必须使用str()。 - user2226755
19
这会增加碰撞的可能性吗? - David C
5
@DavidC 是的,这会增加碰撞的可能性。 - Mat Jones
13
这个答案很糟糕,UUID作为一个整体保证了唯一性,截断它会有碰撞的可能性,这与使用UUID的目的相违背。更好的方法是生成一个所需长度的加密令牌。这也可能存在碰撞的可能性,但我想它要比截断UUID的碰撞概率小得多。 - olfek
1
如果你只截取前八个字符,那么你就会失去 uuid 的唯一性,这也违背了使用它的原因。还有其他 Python 工具可以生成给定长度的随机字母数字字符串。 - user3151858
显示剩余3条评论

12

你可以使用 shortuuid 包。

pip install shortuuid

那么它就类似于UUID包。

import shortuuid
shortuuid.uuid()

输出

'vytxeTZskVKR7C7WgdSP3d'

自定义长度UUID

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

输出

'RaF56o2r58hTKT7AYS9doj'

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


你不能改变uuid的长度。shortuuid.ShortUUID().random(length=22)根据您提供的文档生成了一个加密安全的随机字符串,但这不再是uuid - wehnsdaefflae

1

之前的答案没有提供UUID,可能是因为它们截断了字符串,或者根本没有生成UUID。根据文档,如果你截断了字符串“[t] ID将不再具备通用唯一性[...]”,文档描述ShortUUID().random()生成一个加密安全的字符串而不是UUID。

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

字母表中的字符越多,UUID就越短,但仍然是唯一的。


可能感兴趣的链接:https://hashids.org/python/ - wehnsdaefflae

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接