如何在 Python 中创建一个 8 位唯一 ID?
How to create a 8 digit Unique ID in Python?
我正在制作一个用于练习的网络应用程序,它是一个工作门户。我想为最终用户可见的作业创建 8 位唯一 ID。 ID 可以包含数字和字母。模式必须是 8 位数字,不带连字符或破折号,例如 XXXXXXXX.
我知道 python 中有 UUID 的东西。但他们似乎以其特定格式生成 id。有没有办法以我需要的格式获取 ID?如果没有,请有人指导我如何去做?
我知道有一个类似的话题How can I generate a unique ID in Python?;但它没有具体回答我的问题。它没有回答我想要实现的目标。
提前致谢。
你可以使用 uuid.hex
import uuid
uuid.uuid4().hex[:8] # Might reduce uniqueness because of slicing
或者 Django 也有辅助函数 get_random_string 接受两个参数 length
(default=12) 和 allowed_chars
:
from django.utils.crypto import get_random_string
get_random_string(8)
数据使用os.urandom
,base64
编码;
In [1]: import os
In [2]: import base64
In [3]: base64.b64encode(os.urandom(6)).decode('ascii')
Out[3]: '6Amtry80'
TLDR: 使用 hashids 在顺序整数和随机字符串之间进行一对一转换
如果您正在创建一个网络应用程序并且需要将字符串 ID(如 'x4ua9fam'
映射到数据库中的某个条目,您需要一种强大的一对一方法来在整数和整数之间来回转换字符串 ID。
不必每次都生成一个随机 ID 并检查它是否已被占用,您可以将下一个可用的顺序整数 (0, 1, 2, ...)
分配给每个新项目,并将其 encode
分配到一个唯一的字符串中,使用hashids
。当用户请求字符串时,您可以 decode
将其变回整数并获取您的数据。
我正在制作一个用于练习的网络应用程序,它是一个工作门户。我想为最终用户可见的作业创建 8 位唯一 ID。 ID 可以包含数字和字母。模式必须是 8 位数字,不带连字符或破折号,例如 XXXXXXXX.
我知道 python 中有 UUID 的东西。但他们似乎以其特定格式生成 id。有没有办法以我需要的格式获取 ID?如果没有,请有人指导我如何去做?
我知道有一个类似的话题How can I generate a unique ID in Python?;但它没有具体回答我的问题。它没有回答我想要实现的目标。
提前致谢。
你可以使用 uuid.hex
import uuid
uuid.uuid4().hex[:8] # Might reduce uniqueness because of slicing
或者 Django 也有辅助函数 get_random_string 接受两个参数 length
(default=12) 和 allowed_chars
:
from django.utils.crypto import get_random_string
get_random_string(8)
数据使用os.urandom
,base64
编码;
In [1]: import os
In [2]: import base64
In [3]: base64.b64encode(os.urandom(6)).decode('ascii')
Out[3]: '6Amtry80'
TLDR: 使用 hashids 在顺序整数和随机字符串之间进行一对一转换
如果您正在创建一个网络应用程序并且需要将字符串 ID(如 'x4ua9fam'
映射到数据库中的某个条目,您需要一种强大的一对一方法来在整数和整数之间来回转换字符串 ID。
不必每次都生成一个随机 ID 并检查它是否已被占用,您可以将下一个可用的顺序整数 (0, 1, 2, ...)
分配给每个新项目,并将其 encode
分配到一个唯一的字符串中,使用hashids
。当用户请求字符串时,您可以 decode
将其变回整数并获取您的数据。