Были разные вопросы о генерации случайных чисел, но я не видел ни одного, который бы касался конкретной проблемы, которую я пытаюсь решить.
Мои требования:
Есть ли способ сделать это? Буду признателен за любую помощь или предложения, где искать. (Это будет реализовано в PHP, но я просто ищу алгоритм для этого.)
Возьмите счетчик целых чисел и зашифруйте его, используя схему шифрования от 10 до 10 цифр.
Счетчик будет работать от 0 до 4999. Чтобы аутентифицировать число, просто проверьте после расшифровки, что старшие разряды равны нулю. (Вероятность того, что вы сформировали правильный код «случайно», составляет более двух миллионов.)
Чтобы определить несколько наборов, вы можете позволить счетчику работать с более высокими значениями или использовать другой ключ шифрования.
Простой способ сделать то, о чем вы просите, — это создать процедуру взятия числа и сопоставить его с чем-нибудь, что легко проверить. Например, вы можете решить сделать числа делимыми на 1009. Так что просто сгенерируйте случайные числа, а затем округлите до ближайшего, делимого на 1009. Или вы можете сгенерировать 6-значные числа, а затем использовать алгоритм хеширования, чтобы сгенерировать еще 4 цифры.
Если вы знаете правило, легко убедиться, что число соответствует ему. Вы найдете несколько ложных срабатываний. И это образец, который не будет легко найден случайно.
Но имейте в виду. «Не легко найти случайно», — это не то же самое, что «будет сопротивляться серьезным попыткам сломать его». Если вам нужно что-то безопасное, это не то, как это сделать.