Подтвердить что ты не робот

Как сгенерировать уникальные 64-битные целые числа из Python?

Мне нужно сгенерировать уникальные 64-битные целые числа из Python. Я проверил модуль UUID. Но UUID, который он генерирует, составляет 128 бит целых чисел. Так что это не сработает.

Знаете ли вы, каким образом можно генерировать 64-битные уникальные целые числа в Python? Спасибо.

4b9b3361

Ответ 1

просто замаскируйте 128-битный int

>>> import uuid
>>> uuid.uuid4().int & (1<<64)-1
9518405196747027403L
>>> uuid.uuid4().int & (1<<64)-1
12558137269921983654L

Это более или менее случайные, поэтому у вас есть крошечный шанс столкновения

Возможно, первые 64 бита uuid1 безопаснее использовать

>>> uuid.uuid1().int>>64
9392468011745350111L
>>> uuid.uuid1().int>>64
9407757923520418271L
>>> uuid.uuid1().int>>64
9418928317413528031L

В основном они основаны на часах, гораздо менее случайных, но уникальность лучше

Ответ 2

Уникальные 64 бита

Что случилось с подсчетом? Простой счетчик создаст уникальные значения. Это самый простой и легко убедиться, что вы не будете повторять значение.

Или, если подсчет недостаточно, попробуйте это.

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

В зависимости от того, как вы используете семя и используете генератор случайных чисел, это должно быть уникальным.

Вы можете - конечно, сделать это неправильно и получить повторяющуюся последовательность случайных чисел. Необходимо тщательно следить за тем, как вы обрабатываете семена для программы, которая запускается и останавливается.

Ответ 3

64-разрядное случайное число от генератора случайных чисел ОС, а не PRNG:

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