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

60 投票
5 回答
72914 浏览
提问于 2025-04-16 03:04

我需要在Python中生成独特的64位整数。我查看了UUID模块,但是它生成的是128位的整数,所以这不合适。

你知道有什么方法可以在Python中生成64位的独特整数吗?谢谢。

5 个回答

9

这是从操作系统的随机数生成器获取的一个64位随机数,而不是使用伪随机数生成器(PRNG)。

>>> from struct import unpack; from os import urandom
>>> unpack("!Q", urandom(8))[0]
12494068718269657783L
32

64位唯一

计数有什么问题呢?一个简单的计数器就能生成唯一的值。这是最简单的方法,而且很容易确保不会重复。

或者,如果计数不够好,可以试试这个。

>>> import random
>>> random.getrandbits(64)
5316191164430650570L

根据你如何设置和使用随机数生成器,它应该是唯一的。

当然,你可以错误地使用它,导致随机数出现重复的情况。因此,在处理一个会启动和停止的程序时,如何管理种子非常重要,需要特别小心。

80

只需对这个128位的整数进行遮罩处理

>>> 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

这些主要是基于时钟生成的,所以随机性小得多,但唯一性更好

撰写回答