django 如何在python中生成10位数的unique-id?

wh6knrhe  于 2023-02-20  发布在  Go
关注(0)|答案(2)|浏览(214)

我想在python中生成10位数的unique-id。我已经尝试了以下方法,但没有一个工作

  • get_random_string(10)-〉生成有冲突概率的随机字符串
  • str(uuid.uuid4())[:10] -〉因为我只使用前缀,所以它也有可能发生冲突
  • sequential -〉我可以通过前置0来生成唯一的序列ID,但是它是连续的,更容易猜测。

我们是否有适当的系统来产生10位数的唯一识别码?

kwvwclae

kwvwclae1#

具体取决于您需要多少个ID、创建它们的速度、它们是否必须仅在您的计算机上唯一或在多台计算机上唯一、要允许哪些字符(仅数字、字母数字等)等。生成唯一ID并非易事。
几个想法:

  • 最简单的(当然不是随机的)方法是从0000000000开始,通过递增一直到zzzzzzzzzz
  • 最安全的方法(但可能是最慢的)是存储生成的ID,当您生成一个新的ID时,检查它是否已经存在...
  • 基于当前时间戳+一些内部增量器(对于在相同时间戳生成的ID,取决于时间戳的分辨率)+可选的机器配置(如果您需要它在多台机器中是唯一的)+一些随机+一些 Shuffle 。

但是,ID的随机性越大,对输出的控制就越少,因此需要检查冲突,特别是当生成的ID数量相对于可能的ID数量很大时。
所以说到底,(在一定范围内)* 保证 * 唯一性只有两种方法
1.检查新创建的id是否以前已发布
1.由一个无冲突函数计算,并且您可以控制该函数的输入不能使用两次(例如,在您生成每个id后增加输入)

eni9jsuy

eni9jsuy2#

尝试使用hashlib模块,以便:

import hashlib
import random

def generate_id():
    # Generate a random number
    random_num = str(random.randint(0, 99999999)).encode()

    # Generate a SHA-256 hash of the random number.
    hash_obj = hashlib.sha256(random_num)
    hex_digit = hash_obj.hexdigest()

    return hex_digit[:10]

相关问题