我需要从Python生成唯一的64位整数。我查看了UUID module。但它生成的UUID是128位整数。所以那不行。
你知道在Python中生成64位唯一整数的方法吗?感谢。
答案 0 :(得分:38)
只需屏蔽128bit int
>>> import uuid
>>> uuid.uuid4().int & (1<<64)-1
9518405196747027403L
>>> uuid.uuid4().int & (1<<64)-1
12558137269921983654L
这些或多或少是随机的,所以你很有可能发生碰撞
也许uuid1的前64位使用更安全
>>> uuid.uuid1().int>>64
9392468011745350111L
>>> uuid.uuid1().int>>64
9407757923520418271L
>>> uuid.uuid1().int>>64
9418928317413528031L
这些主要基于时钟,随机性更低,但唯一性更好
答案 1 :(得分:21)
64位唯一
计数有什么问题?一个简单的计数器将创建唯一的值。这是最简单的,很容易确保你不会重复一个值。
或者,如果计数不够好,试试这个。
>>> import random
>>> random.getrandbits(64)
5316191164430650570L
根据种子和使用随机数生成器的方式,这应该是唯一的。
当然,您可以错误地执行此操作并获得重复的随机数序列。对于如何处理启动和停止程序的种子,必须非常小心。
答案 2 :(得分:7)
OS的随机数生成器中的64位随机数,而不是PRNG:
>>> from struct import unpack; from os import urandom
>>> unpack("!Q", urandom(8))[0]
12494068718269657783L
答案 3 :(得分:1)
您可以使用uuid4()
生成一个随机的128位整数UUID。我们必须对由64位(即>>
)生成的每个128位整数进行“二进制右移”(128 - (128 - 64)
)。
from uuid import uuid4
bit_size = 64
sized_unique_id = uuid4().int >> bit_size
print(sized_unique_id)