Python uuid4,如何限制唯一字符的长度
在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'
14
然后你可以使用 shortuuid 来生成一个简短的 UUID:
import shortuuid
shortuuid.uuid()
'vytxeTZskVKR7C7WgdSP3d'
原生解决方案,但碰撞风险很大:
试试:
x = uuid4()
str(x)[:8]
输出结果:
"ffc69c1b"