获取 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 个不同的“值”。 考虑 mysqluuid_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。

旧的(和不正确的)答案

你可以只取前八个字符。

```蟒蛇 id1 = str(uuid.uuid1())[:8] ```

不能保证它们都是独一无二的。

【讨论】:

这可能会发生碰撞你知道@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的主要内容,如果未能解决你的问题,请参考以下文章

生成一个唯一的ID

UUID 作为主键(慢插入)

UUID 最大字符长度

获取表中唯一字符串uuid,可用于随机文件名

将 UUID 32 个字符的十六进制字符串转换为“YouTube 风格”的短 id 并返回

JAVA生成UUID