Существует только 3 способа генерирования уникальных значений, это могут быть пароли, идентификаторы пользователей и т. Д.:
- Используйте эффективный генератор GUID - они длинные и не могут быть сокращены. Если вы используете только часть , вы FAIL .
- По крайней мере, часть номера последовательно генерируется из одной последовательности. Вы можете добавить пух или кодировку, чтобы она выглядела менее последовательной. Преимущество в том, что они начинаются с короткого, а недостаток в том, что они требуют одного источника Обходной путь для ограничения одного источника состоит в том, чтобы иметь нумерованные источники, поэтому вы включаете [source #] + [seq #], и тогда каждый источник может генерировать свою собственную последовательность.
- Генерируйте их с помощью других средств, а затем сверяйте их с единой историей ранее сгенерированных значений.
Любой другой метод не гарантируется. Имейте в виду, что в основном вы генерируете двоичное число (это компьютер), но затем вы можете закодировать его в шестнадцатеричном, десятичном, Base64 или списке слов. Выберите кодировку, которая подходит для вашего использования. Обычно для данных, вводимых пользователем, вам нужен вариант Base32 (на который вы намекали).
Примечание о GUIDS : Они получают силу уникальности от своей длины и метода, используемого для их создания. Все, что меньше 128 бит, небезопасно. Помимо генерации случайных чисел существуют характеристики, которые входят в GUID, чтобы сделать его более уникальным. Имейте в виду, что они только практически уникальны, но не полностью уникальны. Возможно, хотя практически невозможно иметь дубликат.
Обновленное примечание о GUIDS : С момента написания этого я узнал, что многие генераторы GUID используют криптографически безопасный генератор случайных чисел (сложно или невозможно предсказать следующее сгенерированное число, и вряд ли будет повторяться). На самом деле существует 5 различных UUID алгоритмов . Алгоритм 4 - это то, что Microsoft в настоящее время использует для API генерации GUID Windows. GUID - это реализация Microsoft стандарта UUID.
Обновление : если вы хотите от 7 до 16 символов, вам нужно использовать либо метод 2, либо 3.
Итог : Честно говоря, не существует такой вещи, как полностью уникальная. Даже если бы вы использовали последовательный генератор, вы в конечном итоге исчерпали бы хранилище, используя все атомы во вселенной, таким образом возвращаясь к себе и повторяя. Ваша единственная надежда будет тепловой смерть вселенной до достижения этой точки.
Даже лучший генератор случайных чисел имеет возможность повторения, равную общему размеру генерируемого вами случайного числа. Взять хотя бы четверть. Это совершенно случайный битовый генератор, и его шансы на повторение равны 1 к 2.
Так что все сводится к вашему порогу уникальности. Вы можете иметь 100% уникальность в 8 цифр для 1 099 511 627 776 номеров, используя последовательность, а затем кодируя ее base32. Любой другой метод, который не включает проверку по списку прошлых чисел, имеет шансы, равные n / 1 099 511 627 776 (где n = число сгенерированных предыдущих чисел), не быть уникальными.