Генерация рандомной строки php

Генерация рандомной строки 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).

Источник

Читайте также:  Как завершить цикл питон
Оцените статью