В качестве дополнения к предложению Эшли, если вы хотите сгенерировать более короткие и / или более простые для ввода идентификаторов, вы можете сгенерировать некоторые случайные данные и кодировать их с помощью base32:
base64.b32encode(os.urandom(8)).strip('=')
Сделайте его более читабельным, вставив дефисы:
'-'.join(base64.b32encode(os.urandom(8)).strip('=')[5*x:5*(x+1)] for x in range(3))
Это дает вам коды, подобные следующим:
'C6ZVG-NJ6KA-CWE'
Затем просто сохраните результат в хранилище данных и раздайте его пользователям. Я бы посоветовал хранить код без дефисов и удалять эти символы перед проверкой базы данных. Если вы хотите стать действительно модным, алфавит base32 выбирается так, чтобы избегать похожих символов; Вы можете заменить эти символы перед проверкой, чтобы учесть опечатки.
8 байтов случайных данных дают 2 ^ 64 возможных кодов приглашения; если вы раздадите, скажем, 2 ^ 16 (65 536) из них, злоумышленнику все равно придется попробовать 2 ^ 48 (около 300 триллионов) кодов, чтобы найти правильный. Если хотите, вы можете сократить свои коды за счет сокращения пространства поиска.