获取 8 个字符的 UUID
Posted
技术标签:
【中文标题】获取 8 个字符的 UUID【英文标题】:get UUID of 8 characters 【发布时间】:2020-06-16 02:21:08 【问题描述】:如何仅获取 8 个字符的 uuid? 我做了下面的代码行,得到了 36 个字符的 uuid。
id1 = str(uuid.uuid1())
【问题讨论】:
一个 UUID 是一个 128 位的值;您所看到的只是该值的一种可能表示形式,即仅使用 ascii 字符的表示形式。 根据你所说的“角色”,你想要的范围从尴尬到不可能。 UUID 是一个 16 字节的实体,因此 8 个“字符”中的每一个都必须能够表示一个 16 位的实体,可以有 65536 个不同的“值”。 考虑 mysql 的uuid_short()
。我认为它会给你一个 64 位的数字。
【参考方案1】:
你可以试试这个,假设你只想要前 8 个字符而不管对象类型(python3):
import uuid
id1 = str(uuid.uuid1())
first_eight=id1[:8]
print(first_eight)
【讨论】:
【参考方案2】:正确答案
正如here 所回答的,该问题的正确答案是不可能生成 8 个字符的 uuid,因为根据定义,uuid 是 16 个字节。
UUID 的标准在 RFC 4221 中指定。在format section中,第一个字是:
UUID 格式为 16 个八位字节
感谢shudipta-sharma 指出我的原始答案不会产生一个普遍唯一的 ID。
旧的(和不正确的)答案
你可以只取前八个字符。
不能保证它们都是独一无二的。
【讨论】:
这可能会发生碰撞你知道@kimbo 请再次阅读我的回答 -No guarantees about them all being unique.
既然操作要求提供 uuid
(通用唯一 ID),那么为什么您发布的答案不能确保 uuid?【参考方案3】:
你可以试试这个:
import string, random
# ''.join() joins the letters from random.choices() into a single Python str of length k.
join=''.join
join(random.choices(string.ascii_letters, k=8)) # Output is like as 'XDCxVAJl'
资源:Python 的 string 模块包含许多有用的常量:ascii_lowercase、ascii_uppercase、string.punctuation、ascii_whitespace、string.hexdigits 和其他一些。
参考:https://realpython.com/python-random/
【讨论】:
这只是一个随机的 8 个字符的字符串,而不是 UUID。以上是关于获取 8 个字符的 UUID的主要内容,如果未能解决你的问题,请参考以下文章