Сгенерировать рандомную строку php
Reg.ru: домены и хостинг
Крупнейший регистратор и хостинг-провайдер в России.
Более 2 миллионов доменных имен на обслуживании.
Продвижение, почта для домена, решения для бизнеса.
Более 700 тыс. клиентов по всему миру уже сделали свой выбор.
Бесплатный Курс «Практика HTML5 и CSS3»
Освойте бесплатно пошаговый видеокурс
по основам адаптивной верстки
на HTML5 и CSS3 с полного нуля.
Фреймворк Bootstrap: быстрая адаптивная вёрстка
Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.
Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.
Верстайте на заказ и получайте деньги.
Что нужно знать для создания PHP-сайтов?
Ответ здесь. Только самое важное и полезное для начинающего веб-разработчика.
Узнайте, как создавать качественные сайты на PHP всего за 2 часа и 27 минут!
Создайте свой сайт за 3 часа и 30 минут.
После просмотра данного видеокурса у Вас на компьютере будет готовый к использованию сайт, который Вы сделали сами.
Вам останется лишь наполнить его нужной информацией и изменить дизайн (по желанию).
Изучите основы HTML и CSS менее чем за 4 часа.
После просмотра данного видеокурса Вы перестанете с ужасом смотреть на HTML-код и будете понимать, как он работает.
Вы сможете создать свои первые HTML-страницы и придать им нужный вид с помощью CSS.
Бесплатный курс «Сайт на WordPress»
Хотите освоить CMS WordPress?
Получите уроки по дизайну и верстке сайта на WordPress.
Научитесь работать с темами и нарезать макет.
Бесплатный видеокурс по рисованию дизайна сайта, его верстке и установке на CMS WordPress!
Хотите изучить JavaScript, но не знаете, как подступиться?
После прохождения видеокурса Вы освоите базовые моменты работы с JavaScript.
Развеются мифы о сложности работы с этим языком, и Вы будете готовы изучать JavaScript на более серьезном уровне.
*Наведите курсор мыши для приостановки прокрутки.
Генерация случайных строк в PHP
В этой небольшой заметке я покажу, как можно сгенерировать случайную строку средствами PHP.
Подобная задача может возникнуть в самых разных ситуациях, например:
— создание случайного пароля из предустановленного набора символов;
— генерация случайного имени для файла или папки (в целях их скрытия и защиты);
— создание временного уникального идентификатора для какого-либо процесса;
— использование случайной строки в качестве «исходного материала» для более сложного скрипта и т.д.
При творческом подходе можно найти и другие сферы применения случайных строк.
В PHP нет специальной функции, которая выполняла бы интересующую нас задачу, поэтому такой инструмент нужно писать самому под свои нужды.
Ниже привожу один из вариантов решения этой задачи.
// Функция принимает 2 параметра: длину случайной строки и символы, которые участвуют в ее формировании function random_string ($str_length, $str_characters) < $str_characters = array (0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'); // Функция может генерировать случайную строку и с использованием кириллицы //$str_characters = array (0,1,2,3,4,5,6,7,8,9,'а','б','в','г','д','е','ж','з','и','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','э','ю','я'); // Возвращаем ложь, если первый параметр равен нулю или не является целым числом if (!is_int($str_length) || $str_length < 0) < return false; >// Подсчитываем реальное количество символов, участвующих в формировании случайной строки и вычитаем 1 $characters_length = count($str_characters) - 1; // Объявляем переменную для хранения итогового результата $string = ''; // Формируем случайную строку в цикле for ($i = $str_length; $i > 0; $i--) < $string .= $str_characters[mt_rand(0, $characters_length)]; >// Возвращаем результат return $string; >
Поскольку материал рассчитан на новичков, сделаю пояснения по работе данной функции.
Сама функция генерации случайной строки принимает два параметра. Первый — количество символов, которое мы хотим видеть в результирующей строке. Второй — непосредственно массив символов, которые мы хотим использовать при генерации.
Поскольку выполнение функции не имеет смысла при нулевой или отрицательной длине результирующей строки и будет нарушено при указании числа, не являющегося целым, мы предусматриваем данные ситуации и возвращаем ложь.
Если первый параметр корректный, то мы подсчитываем количество символов, участвующих в формировании строки с помощью функции count() и вычитаем из получившегося числа единицу. Для чего мы это делаем? На этот вопрос я отвечу чуть позже, а пока идем дальше по функции.
Объявив переменную $string для хранения итогового результата, мы приступаем к формированию случайной строки в цикле for.
В качестве начального значения счетчика $i цикла выступает количество символов, которое мы хотим увидеть в случайной строке ($str_length).
Затем идет условие, что цикл должен выполняться до тех пор, пока значение счетчика больше нуля.
Наконец, после каждой итерации цикла мы уменьшаем значение счетчика на единицу с помощью оператора декремента «—«.
Таким образом, в цикле будет совершено столько итераций, сколько символов мы хотим получить в итоговой строке.
Ну а теперь посмотрим на тело цикла и вернемся к вопросу о том, для чего мы вычитали единицу из общего количества символов в переменной $str_characters.
Как вы видите, итоговую строку мы формируем, последовательно добавляя к переменной $string по одному символу за каждый проход по циклу.
Давайте посмотрим детальнее.
Мы используем функцию mt_rand() и передаем ей два параметра — ноль и ту самую уменьшенную на единицу переменную $characters_length. Функция mt_rand() позволяет нам просто сгенерировать случайное число в заданном диапазоне (т.е. от нуля до $characters_length).
Смысл использования этой функции в том, что с ее помощью мы создаем случайное число, которое используется как индекс для массива $str_characters.
Индекс указывает на то, какой именно символ из массива $str_characters мы хотим получить.
Вот мы и подошли к ключевому моменту. Если бы первый элемент мы получали с помощью конструкции вида
то тогда последний элемент можно было бы получить, написав следующее (ведь в массиве у нас 62 элемента):
Это было бы вполне логично, но, к сожалению, неверно.
В действительности первый элемент доступен через
а 62 элемент (последний) через
Вы можете убедиться в этом просто выведя на экран данные значения.
Теперь становится совершенно понятно, для чего мы вычитали из 62 единицу. Только лишь для того, чтобы диапазон наших индексов был от 0 до 61. Именно это обеспечит нам корректное формирование случайной строки без вероятности случайно обратиться к несуществующему элементу с индексом 62.
Вот и все. Возвращаем значение с помощью оператора return — и наша функция готова.
Осталось вызвать ее и передать в качестве параметра желаемое количество символов в нашей случайной строке, например так:
echo random_string(16,$str_characters);
В результате мы получим нечто совершенно бессвязное, вроде:
Цель достигнута, и теперь мы можем творчески применять нашу функцию там, где это необходимо.
Разумеется, наша функция универсальна и прекрасно работает также с русским языком. В коде выше вы можете увидеть еще один вариант массива $str_characters (он закомментирован), который содержит кириллические символы.
Для того, чтобы в этом убедиться, мы можем закомментировать первый массив $str_characters (с латинскими символами) и раскомментировать второй.
Теперь, если мы обновим страницу, то получим что-то вроде:
Таким образом, вы можете использовать любые символы, какие только захотите. Для этого вы можете или добавить их в уже существующий массив, либо создать новый.
И напоследок одно замечание, которое может быть полезно.
Уверен, что вы, как пользователь, встречались со случайно сгенерированными паролями, в которых едва ли можно понять, что что же это за символ:
— то ли маленькая буква «l», то ли цифра «1»;
— то ли русская «с», то ли английская «c»;
— то ли русская «у», то ли английская «y»;
— то ли ноль, то ли буква «о» (опять-таки, русская или английская);
— и т.д.
Поэтому, если вы сами генерируете какую-то строку для других пользователей, стоит позаботиться о том, чтобы она точно была им понятна. Представьте, что вы оказались на месте другого человека и гадаете: «Что же это такое?», «Буква это или цифра, черт возьми?»
В итоге, так и не разобрав, что это, вы вынуждены либо просто копировать строку, либо методом исключения выяснять, что же за символы в нее входят.
Согласитесь, что это очень неудобно и вряд ли может кому-то понравиться. Поэтому при выборе символов, из которых будет состоять строка, старайтесь сделать так, чтобы не было похожих по начертанию букв и цифр и, тем более, вряд ли стоит смешивать разные языки, чтобы окончательно не запутать человека.
Уважайте ваших пользователей, и они ответят вам взаимностью. Ну а я на этом заканчиваю, до встречи в новых материалах!
С уважением, Дмитрий Науменко
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Генерация случайных буквенно-цифровых строк в PHP
Monty Shokeen Last updated Nov 23, 2020
Позвольте мне начать этот пост, сказав, что почти ни одно событие не является случайным. Даже исход классического броска монеты теоретически можно было бы предсказать, если бы мы знали о влиянии каждого фактора, например, трения, гравитации и начальной силы.
То же самое применимо к генерации случайных чисел и буквенно-цифровых строк. Самое лучшее, на что мы можем надеяться, это генерировать числа и строки, которые не следуют шаблону и не могут быть практически предсказаны злоумышленником.
В этом уроке мы рассмотрим различные методы генерации случайных чисел и буквенно-цифровых строк в PHP. Некоторые из них будут криптографически безопасны, а другие предназначены только для случайного использования, например, назначение псевдослучайных имен файлов или создание URL-адресов и предложение имен пользователей.
Создание случайных чисел в PHP
Существуют три различные функции для генерации случайных чисел в PHP. Все они будут принимать минимальное и максимально возможное значение для случайных чисел и выдавать случайное число для вас. Это rand($min, $max) , mt_rand($min, $max) и random_int($min, $max) .
С rand() минимальные и максимальные значения целых чисел, которые вы можете генерировать, лежат между 0 и значением, возвращаемым функцией getrandmax() . До PHP 7.1.0 эта функция была примерно в четыре раза медленнее, чем mt_rand() . Однако, начиная с PHP 7.1.0, она была создана как псевдоним mt_rand() . В отличие от mt_rand() , вы можете установить значение $max меньше, чем $min , не вызывая ошибки.
С mt_rand() минимальные и максимальные значения целых чисел, которые вы можете генерировать, лежат между 0 и значением, возвращаемым mt_getrandmax() . Функция использует реализацию Mersenne Twister для генерации случайных чисел. Остерегайтесь, до PHP 7.1.0, эта функция реализовывала неверную версию алгоритма для генерации чисел. Однако он был исправлен в более новых версиях.
Функция стала еще лучше в PHP 7.2.0, избавившись от ошибки модульного смещения. Это означает, что для некоторых конкретных значений ваша последовательность случайных чисел теперь будет немного лучше по сравнению со старыми версиями. Однако какой-то специализированный код может действительно полагаться на эту предвзятость. Если это так, вы можете использовать более старый алгоритм, вызвав функцию mt_srand() для задания начального числа для генератора случайных чисел и передачи MT_RAND_PHP в качестве значения второго параметра.
Функция mt_rand() имеет период 2 19937 -1, что в основном означает, что в наилучших сценариях вы получаете целых 2 19937 -1 случайных чисел до того, как последовательность начнет повторяться. Следует отметить, что повторение последовательности не совпадает с повторением определенного числа. Другими словами, вы можете получить одно и то же случайное число дважды, но это не значит, что сама последовательность начала повторяться. Примером может служить следующая последовательность:
187 3276 1267 15 1267 34598 3467 125 17
В приведенной выше последовательности у нас было 1267 два раза на выходе, но это не означает, что после этого вся последовательность начала повторяться. Маловероятно, чтобы такое же число повторялось так быстро в случайной последовательности, но это возможно!
Криптографически безопасные случайные целые числа
Если вы хотите криптографически безопасные псевдослучайные числа, функция random_int() в PHP — ваш лучший выбор. Он будет генерировать случайные числа между предоставленными значениями $min и $max , которые по умолчанию соответствуют PHP_INT_MIN и PHP_INT_MAX . К сожалению, эта функция доступна только с PHP 7.0. Для версий до этого вы можете использовать этот полифилл на GitHub.
Случайные числа с плавающей точкой
Вместо генерации случайных целых чисел вы также можете генерировать числа с плавающей точкой. Это можно сделать легко, просто разделив случайное число на значение, возвращаемое mt_getrandmax() . В следующем примере будет проиллюстрировано, как создать случайное значение с плавающей точкой от 0 до 1 или между любыми другими минимальными и максимальными пределами.