PHP генератор случайных строк без повторов - PullRequest
1 голос
/ 20 сентября 2011

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

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

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

[ПРАВИТЬ] Я понимаю, что уникальный + случайный(в принципе) невозможно.Но есть ли способ, которым я могу генерировать уникальные, неочевидные строки?Спасибо, Данишгол!

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

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

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

Что обычно крайне мало для беспокойства.

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

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

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

$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 ,

...