Эффективно генерируйте алфавитно-цифровую строку с 16 символами

Я ищу очень быстрый способ генерировать алфавитно-цифровой уникальный идентификатор для первичного ключа в таблице.

Что-то вроде этого работало бы?

def genKey():
    hash = hashlib.md5(RANDOM_NUMBER).digest().encode("base64")
    alnum_hash = re.sub(r'[^a-zA-Z0-9]', "", hash)
    return alnum_hash[:16]

Каков был бы хороший способ генерировать случайные числа? Если я основываю его на микровремени, я должен объяснить возможность нескольких вызовов genKey () одновременно от различных экземпляров.

Или есть ли лучший способ сделать все это?

56
задан Mark Amery 6 February 2018 в 16:23
поделиться

3 ответа

Обратите внимание на модуль uuid (Python 2.5+).

Быстрый пример:

>>> import uuid
>>> uid = uuid.uuid4()
>>> uid.hex
'df008b2e24f947b1b873c94d8a3f2201'

Обратите внимание, что OP запросил 16-символьную буквенно-цифровую строку, но строки UUID4 имеют длину 32 символа. Вы не должны обрезать эту строку, вместо этого используйте полные 32 символа.

33
ответ дан 26 November 2019 в 17:03
поделиться

Это значение увеличивается на 1 при каждом вызове (повторяется). Решение о том, где лучше всего хранить ценность, будет зависеть от того, как вы ее используете. Вы можете найти это интересное объяснение, поскольку в нем обсуждается не только принцип работы Guids, но и то, как сделать меньшее.

Краткий ответ таков: Используйте некоторые из этих символов в качестве отметки времени, а другие символы как «уникальность», значение увеличивается на 1 при каждом вызове вашего генератора uid.

2
ответ дан 26 November 2019 в 17:03
поделиться

Вы можете использовать это:

>>> import random
>>> ''.join(random.choice('0123456789ABCDEF') for i in range(16))
'E2C6B2E19E4A7777'

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

46
ответ дан 26 November 2019 в 17:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: