Создание уникальных и узнаваемых наборов чисел

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

Мои требования:

  • Мне нужно иметь возможность генерировать набор из 5000 чисел, каждый номер длиной 10 цифр
  • Числа в этом наборе должны быть случайными (или достаточно случайными, чтобы их было трудно угадать)
  • Числа в этом наборе должны быть уникальными
  • Нет необходимости в заказе в заданных элементах
  • Мое программное обеспечение должно распознавать, что число было сгенерировано с использованием этого алгоритма. Члены набора не хранятся (но могут быть начальное число или некоторый параметр, используемый для их построения).
  • Процесс должен быть повторяемым. Наборы из 5000 номеров будут генерироваться в разное время. Одно и то же число МОЖЕТ появиться в разных наборах, но алгоритм их генерации не должен быть легко повторяемым / распознаваемым. (Например, если у меня есть набор из 5000 чисел, я не смогу легко определить, каким будет набор чисел в другом наборе из 5000.)

Есть ли способ сделать это? Буду признателен за любую помощь или предложения, где искать. (Это будет реализовано в PHP, но я просто ищу алгоритм для этого.)

0

Решение

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

Счетчик будет работать от 0 до 4999. Чтобы аутентифицировать число, просто проверьте после расшифровки, что старшие разряды равны нулю. (Вероятность того, что вы сформировали правильный код «случайно», составляет более двух миллионов.)

Чтобы определить несколько наборов, вы можете позволить счетчику работать с более высокими значениями или использовать другой ключ шифрования.

0

Другие решения

Простой способ сделать то, о чем вы просите, — это создать процедуру взятия числа и сопоставить его с чем-нибудь, что легко проверить. Например, вы можете решить сделать числа делимыми на 1009. Так что просто сгенерируйте случайные числа, а затем округлите до ближайшего, делимого на 1009. Или вы можете сгенерировать 6-значные числа, а затем использовать алгоритм хеширования, чтобы сгенерировать еще 4 цифры.

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

Но имейте в виду. «Не легко найти случайно», — это не то же самое, что «будет сопротивляться серьезным попыткам сломать его». Если вам нужно что-то безопасное, это не то, как это сделать.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector