Intereting Posts

PHP Random String Generator без повторений

Я пытаюсь написать PHP-функцию, которая будет генерировать «предположительно» случайные строки, которые должны быть уникальными, независимо от количества запусков. Ну, он может работать несколько раз, чтобы генерировать, но предпочтительно не много раз.

Например, когда вы загружаете изображение в imgur, оно генерирует случайную 5-буквенную строку [a-zA-Z]. Если я хочу дублировать это (сохранить строку с уникальным ключом в базе данных MySQL), без необходимости повторять выбор и гарантировать, что ключ еще не существует, есть ли какой-либо способ? В то же время важность случайности существует, поэтому я бы предпочел не идти 1,2,3 (aaaaa, aaaab, aaaac), поскольку это полностью аннулирует необходимость случайности.

Я знаю, что существует 52 ^ 5 различных возможностей, но только для образовательных целей (и написания будущего алгоритма), существует ли эффективный метод генерации этих «уникальных» «случайных» строк?

[EDIT] Я понимаю, что уникальный + случайный (в принципе) невозможно. Но есть ли способ генерировать уникальные, неочевидные строки? Спасибо, датчане!

Когда вы произвольно генерируете какие-либо данные, вы НЕ МОЖЕТЕ ГАРАНТИРОВАТЬ уникальность.

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

Обычно это крайне мало, чтобы вызывать беспокойство.

Но если вы хотите гарантировать уникальность, у вас есть 2 метода:

  1. Поиск ранее сгенерированных результатов и сброс дубликатов (это ваш метод MySQL)
  2. Используйте определенное значение, которое, как вам известно, уникально, и добавьте / добавьте это значение к случайным данным, например, в случае веб-приложения вы можете использовать IP Address of requester вместе с request time который гарантированно генерирует уникальные данные, поскольку два пользователя не могут тот же IP-адрес в САМОЕ время

Простой метод, который я нашел:

 $charset = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $rand_str = ''; $desired_length = 10; while(strlen($rand_str) < $desired_length) $rand_str .= substr(str_shuffle($charset), 0, 1); 

… или…

 $desired_length = 10; echo base64_encode(openssl_random_pseudo_bytes($desired_length)); 

Вы также должны прочитать еще два метода для генерации случайной строки с использованием php ,