- Генерация рандомной строки php
- Генерация случайных строк в PHP
- random_bytes
- Список параметров
- Возвращаемые значения
- Ошибки
- Список изменений
- Примеры
- Смотрите также
- Генерация случайной строки в PHP
- 1. Использование random_bytes() функция
- 2. Использование openssl_random_pseudo_bytes() функция
- 3. Использование random_int() функция
Генерация рандомной строки 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»;
— то ли ноль, то ли буква «о» (опять-таки, русская или английская);
— и т.д.
Поэтому, если вы сами генерируете какую-то строку для других пользователей, стоит позаботиться о том, чтобы она точно была им понятна. Представьте, что вы оказались на месте другого человека и гадаете: «Что же это такое?», «Буква это или цифра, черт возьми?»
В итоге, так и не разобрав, что это, вы вынуждены либо просто копировать строку, либо методом исключения выяснять, что же за символы в нее входят.
Согласитесь, что это очень неудобно и вряд ли может кому-то понравиться. Поэтому при выборе символов, из которых будет состоять строка, старайтесь сделать так, чтобы не было похожих по начертанию букв и цифр и, тем более, вряд ли стоит смешивать разные языки, чтобы окончательно не запутать человека.
Уважайте ваших пользователей, и они ответят вам взаимностью. Ну а я на этом заканчиваю, до встречи в новых материалах!
С уважением, Дмитрий Науменко
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
random_bytes
Создаёт строку, содержащую равномерно выбранные случайные байты с запрошенной длиной.
Поскольку возвращаемые байты выбираются совершенно случайно, полученная строка может содержать непечатаемые символы или недопустимые последовательности UTF-8. Может потребоваться её кодирование перед передачей или отображением.
Случайная последовательность, создаваемая функцией, подходит для всех приложений, включая генерацию долгосрочных секретов, таких как ключи шифрования.
Источники случайных величин в порядке приоритета:
- Linux: » getrandom(), /dev/urandom
- FreeBSD >= 12 (PHP >= 7.3): » getrandom(), /dev/urandom
- Windows (PHP >= 7.2): » CNG-API Windows: » CryptGenRandom
- macOS (PHP >= 8.2; >= 8.1.9; >= 8.0.22, если CCRandomGenerateBytes доступен во время компиляции): CCRandomGenerateBytes() macOS (PHP >= 8.1; >= 8.0.2): arc4random_buf(), /dev/urandom
- NetBSD >= 7 (PHP >= 7.1; >= 7.0.1): arc4random_buf(), /dev/urandom
- OpenBSD >= 5.5 (PHP >= 7.1; >= 7.0.1): arc4random_buf(), /dev/urandom
- DragonflyBSD (PHP >= 8.1): » getrandom(), /dev/urandom
- Solaris (PHP >= 8.1): » getrandom(), /dev/urandom
- Любая комбинация операционной системы и версии PHP, не указанная ранее: /dev/urandom
- Если ни один из источников не доступен или все они не генерируют случайную величину, то будет выброшено исключение Random\RandomException .
Замечание: Эта функция была добавлена в PHP 7.0, а для версий с 5.2 по 5.6 включительно доступна » пользовательская реализация.
Список параметров
Длина генерируемой строки в байтах; должно быть 1 или больше.
Возвращаемые значения
Возвращает строку, состоящую из заданного количества криптографически безопасных байт.
Ошибки
- Если подходящие источники случайных величин отсутствуют, то выбрасывается исключение Random\RandomException .
- Если значение параметра length меньше 1 , будет выброшена ошибка ValueError .
Список изменений
Версия | Описание |
---|---|
8.2.0 | В случае возникновения ошибки CSPRNG , функция теперь будет выбрасывать исключение Random\RandomException . Ранее выбрасывалось исключение Exception . |
Примеры
Пример #1 Пример использования random_bytes()
Результатом выполнения данного примера будет что-то подобное:
Смотрите также
- Random\Randomizer::getBytes() — Получает случайные байты
- random_int() — Получает криптографически безопасное, равномерно выбранное целое число
- bin2hex() — Преобразует бинарные данные в шестнадцатеричное представление
- base64_encode() — Кодирует данные в формат MIME base64
Генерация случайной строки в PHP
В этой статье показано, как сгенерировать случайную строку в PHP.
1. Использование random_bytes() функция
В PHP 7 вы можете использовать random_bytes() функция для генерации криптографически безопасных случайных байтов указанной длины. Возвращенные байты могут быть преобразованы в строку, содержащую шестнадцатеричное представление.
Функции CSPRNG random_bytes() а также random_int() были добавлены в PHP в версии 7.0. Эти функции можно использовать в криптографических целях, например для генерации случайных векторов инициализации и солт-значений. Если вы все еще используете PHP 5.x, вот PHP 5 polyfill для этих функций.
2. Использование openssl_random_pseudo_bytes() функция
До PHP 7.0 вы также можете использовать openssl_random_pseudo_bytes() функция для генерации псевдослучайной строки байтов указанной длины. Он использует криптографически стойкий алгоритм для создания псевдослучайных байтов. Начиная с PHP 7.4.0, эта функция выдает исключение в случае сбоя.
3. Использование random_int() функция
Если вы хотите ограничить допустимые символы в случайной строке, вы можете написать собственную процедуру для генерации случайных строк. Наиболее распространенный и эффективный подход — случайный выбор символов из нужного диапазона с помощью random_int() и добавляйте этот символ в строку, пока не будет достигнута нужная длина.
Вот пример того, как вы можете этого добиться. Он генерирует случайную буквенно-цифровую строку ASCII, используя диапазон, состоящий из прописных и строчных букв и цифр. Как уже упоминалось ранее, random_int() Функция была представлена в PHP 7 и использует криптографически безопасный генератор псевдослучайных чисел (CSPRNG).