Ответ FuzzYspo0N в комментариях очень хороший. По сути, эта проблема сводится к тому, чтобы сделать идентификаторы игр достаточно уникальными, чтобы избежать коллизий, не делая их сколь угодно сложными. Стандартные 128-битные GUID получают свою уникальность, используя локальную информацию (такую как ваш MAC и другие факторы), чтобы сделать вероятность коллизии между машинами очень маленькой, а затем добавляют случайный и основанный на времени коэффициент, чтобы сделать вероятность коллизии внутри этой машины. очень маленький.
Вы можете следовать той же стратегии, чтобы создать свои собственные идентификаторы. Начните с чем-то запоминающимся для пользователя, но относительно уникальным (если пользователь имеет глобальное имя пользователя, это начало хорошее, или имя машины / IP), а также добавить другие факторы, пока вы не генерироваться что-то уникальное. Выбирая что-то локальное, например, имя компьютера, вы ограничиваете набор потенциальных коллизий настолько, что можете начинать запрашивать их, если они есть. Например, как только вы ограничиваете его только этим пользователем или только этой машиной, вы точно знаете, куда вам нужно обратиться, чтобы проверить, используется ли уже этот UID.
Например, если я знаю, что мое имя пользователя уникально для всей системы, то MrCranky: 1 является действительным UID. Если я могу проверить, является ли MrCranky: 1 уже используется (по каким-либо другим способом), то я могу только продолжать пробовать номера, пока я не нашел уникальный один.
Используя какой-то другой фактор (например, случайность или время), я могу повысить вероятность того, что впервые выберу неиспользуемый идентификатор. Например, если вы знаете, что вы не можете реально создать более одного сеанса в секунду, то при использовании MrCranky: 122730 (текущее время, с точностью до секунды) я получу уникальный идентификатор, который будет относительно запоминающимся для пользователя.
Пока у вас есть некоторая часть относительно уникальной информации (не обязательно идеальной, просто в основном уникальной), вы можете использовать ее в качестве начального блока, а это означает, что действительно уникальная часть (некоторый целочисленный код) может гораздо гораздо короче, и, таким образом, UID более запоминающимся.