Функция php случайная буква

Генерация случайной строки в 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).

Источник

Генерация случайных буквенно-цифровых кодов в PHP

Несколько примеров, как сгенерировать случайные последовательности численных и буквенных строк заданной длины и проверить их уникальность в базе данных MySQL.

Только цифры

function random_number($length = 6) < $arr = array( '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' ); $res = ''; for ($i = 0; $i < $length; $i++) < $res .= $arr[random_int(0, count($arr) - 1)]; >return $res; > echo random_number();

Примеры сгенерированных строк:

288689 203687 202300 076269 102412 851974

Только буквы

function random_number($length = 6) < $arr = array( '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', ); $res = ''; for ($i = 0; $i < $length; $i++) < $res .= $arr[random_int(0, count($arr) - 1)]; >return $res; > echo random_number();

Примеры сгенерированных строк:

PJEYOL PBQQAR IZWQST XWEDDM BEKJRB UFCSSP

Буквы и цифры

function random_number($length = 6) < $arr = array( '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', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0' ); $res = ''; for ($i = 0; $i < $length; $i++) < $res .= $arr[random_int(0, count($arr) - 1)]; >return $res; > echo random_number();

Примеры сгенерированных строк:

294M4K 2KR9BN EIMN4I COTETX L0DFJG ZEKXJZ

Генерация кода с проверкой в базе данных

Если сгенерированные коды должны быть уникальные, то перед записью в базу данных нужно сделать проверку с помощью цикла do while:

// Подключение к БД $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); do < // Генерируем код $number = random_number(); // Проверяем в БД $sth = $dbh->prepare("SELECT * FROM `codes` WHERE `value` = ?"); $sth->execute($number); $is_db = $sth->fetch(PDO::FETCH_ASSOC); if (!empty($is_db) < $cont = true; >else < $cont = false; >> while ($cont === false); // Сохранение уникального кода $sth = $dbh->prepare("INSERT INTO `codes` SET `value` = ?"); $sth->execute($number);

Источник

Читайте также:  Какая последняя версия php

Генерация случайных буквенно-цифровых строк в PHP

Monty Shokeen

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 artisan create view

Функция стала еще лучше в 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 или между любыми другими минимальными и максимальными пределами.

Источник

Генерация случайных буквенно-цифровых строк в PHP

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

То же самое применимо к генерации случайных чисел и буквенно-цифровых строк. Лучшее, на что мы можем надеяться, – это генерировать числа и строки, которые не соответствуют шаблону и не могут быть практически предсказаны злоумышленником.

В этом уроке мы рассмотрим различные методы генерации случайных чисел и буквенно-цифровых строк в 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_PHP в качестве значения второго параметра.

Функция mt_rand() имеет период 2 19937 -1, что в основном означает, что в лучших случаях вы получаете до 2 19937 -1 случайных чисел, прежде чем последовательность начнет повторяться. Следует отметить, что повторение последовательности не совпадает с повторением определенного числа. Другими словами, вы можете получить одно и то же случайное число дважды, но это не означает, что сама последовательность начала повторяться. Следующая последовательность является примером:

В приведенной выше последовательности у нас было 1267 дважды на выходе, но это не значит, что вся последовательность начала повторяться после этого. Маловероятно, что такое же число будет повторяться так скоро в случайной последовательности, но это возможно!

Криптографически безопасные случайные целые числа

Если вы хотите криптографически защищенные псевдослучайные числа, random_int() в PHP – ваш лучший выбор. Он будет генерировать случайные числа между предоставленными значениями $min и $max , которые по умолчанию PHP_INT_MIN и PHP_INT_MAX . К сожалению, эта функция доступна только начиная с PHP 7.0. Для версий до этого вы можете использовать этот polyfill на GitHub .

Случайные числа

Вместо генерации случайных целых чисел вы также можете генерировать числа с плавающей точкой. Это можно сделать без особых усилий, просто разделив случайное число на значение, возвращаемое mt_getrandmax() . В следующем примере будет показано, как генерировать случайное число с плавающей точкой между 0 и 1 или между любыми другими минимальными и максимальными пределами.

Источник

Оцените статью