Создание уникальной строки в Python/Django

Я хочу создать строку (ключ) размером 5 для моих пользователей на моем веб-сайте. Больше похоже на PIN-код BBM.

Ключ будет содержать цифры и буквы в верхнем регистре:

  • AU1B7
  • Y56AX
  • M0K7A

Как я могу быть в покое о уникальности строк, даже если я их генерирую в миллионах?

В самом питоническом способе, как я могу это сделать?

Ответ 2

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

import random

def generate(unique):
    chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    while True:
        value = "".join(random.choice(chars) for _ in range(5))
        if value not in unique:
            unique.add(value)
            break

unique = set()
for _ in range(10):
    generate(unique)

Ответ 3

size = 5
''.join(random.choice(string.letters[26:] + string.digits) for in range(size))

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

def generate(size=5):
    code = ''.join(random.choice(string.letters[26:] + string.digits) for in range(size))
    if check_if_duplicate(code):
        return generate(size=5)
    return code

или с использованием уникального ограничения django и обработки исключений.