Как сделать генерацию уникального идентификатора с ограниченным количеством элементов?

Для примера, длина идентификатора 4, используются числа [1-9], можно ли построить генерацию так, чтобы варианты не повторялись до самого последнего значения?
Если нет, то хотя бы как уменьшить количество попаданий в уже имеющиеся, когда свободных остается все меньше.
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
инкремент?
посмотрите на uuid, 4 слишком мало, всего 10000 вариантов
Ответ написан
@MiiNiPaa
Самый простой способ: просто выдавать по очереди: 1111, 1112, 1113, 1114 ...

Если нужен относительно случайный вариант:

В вашем случае: сгенерировать все возможные варианты, перемешать и выдавать по очереди.

В общем случае, сделать как GUID: принять "ограниченое количество" достаточно большим, чтобы вероятность коллизии была ничтожна.

Ещё можно выдавать блоками: скажем в вашем случае длина - 12. Делаем два масства: массив выданных блоков и массив выданных значений из текщего блока. Выдавать блоками, скажем, все значения начинающиеся на 143256... Внутри блока делать как в самом первом случае: сгенерировать все значения и выдавать по очереди. Закончится блок - выдать другой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы