如何在Python中创建8位唯一ID?

时间:2017-03-09 18:39:45

标签: django python-3.x uuid

我正在为练习制作一个网络应用程序,它是一个工作门户网站。我想为作业创建8位唯一ID,这对最终用户可见。 ID可以有数字和字母。模式必须为8位数,不带连字符或短划线,如 XXXXXXXX

我知道python中有UUID的东西。但它们似乎以特定格式生成id。有没有办法以我所需的格式获取ID?如果不是,有人可以指导我如何去做吗?

我知道有类似的帖子How can I generate a unique ID in Python?;但它没有具体回答我的问题。它没有回答我想要实现的目标。

提前致谢。

3 个答案:

答案 0 :(得分:10)

你可以使用uuid.hex

import uuid
uuid.uuid4().hex[:8]

或者Django还有辅助函数get_random_string,它接受​​两个参数length (默认= 12)allowed_chars

from django.utils.crypto import get_random_string
get_random_string(8).lower()

答案 1 :(得分:2)

对数据使用os.urandombase64对其进行编码;

In [1]: import os

In [2]: import base64

In [3]: base64.b64encode(os.urandom(6)).decode('ascii')
Out[3]: '6Amtry80'

答案 2 :(得分:1)

TLDR:使用hashids在顺序整数和随机字符串之间一对一转换

如果您要创建Web应用程序,并且需要将'x4ua9fam'之类的字符串ID映射到数据库中的某些条目,则需要一种健壮的一对一方法在整数和字符串之间来回转换。 ID。

您可以为每个新项目分配下一个可用的顺序整数(0, 1, 2, ...),而不必encode将其分配给唯一的字符串,而不必每次都生成一个随机id并使用{{ 3}}。当用户请求该字符串时,您可以decode将其返回为整数并获取数据。