如何从Python生成唯一的64位整数?

时间:2010-08-20 11:09:10

标签: python guid random uniqueidentifier uuid

我需要从Python生成唯一的64位整数。我查看了UUID module。但它生成的UUID是128位整数。所以那不行。

你知道在Python中生成64位唯一整数的方法吗?感谢。

4 个答案:

答案 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)