PHP7. Генерация случайной строки

Многие программисты сталкиваются с необходимостью генерации случайной (рандомной) строки, но решения доступные в интернете оказываются громоздкими или имеют медленную скорость исполнения.
С момента появления PHP7 получить случайную строку на много проще.

PHP7. Генерация случайной строки


Похожая, полная версия функции с поддержкой различных версий PHP мне встречалась в Laravel Framework.
В данной статье будет описана данная функция, но в более урезанном виде (только для php7), за счет появления функции random_bytes.
Если вам необходима данная функция для других версий языка, то ищите как получить random_bytes (рандомные байты).

Переходим к разбору функции:

Пока длина полученной строки менее необходимой длины
while (($len = strlen($string)) < $length) {


Получаем размер случайной строки
$size = $length - $len;


Функция random_bytes формирует криптографические безопасные псевдослучайные байты.
$bytes = random_bytes($size);


Функция base64_encode кодирует полученные псевдослучайные байты алгоритмом MIME base64 и функция str_replace выполняет замену (удаляет) лишние символы ('/', '+', '=').
str_replace(['/', '+', '='], '', base64_encode($bytes))


Применив функцию substr, возвращаем подстроку с 0 позиции до позиции указанной в переменной $size (рассмотрено ранее).
$string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);


В итоге, пройдя весь цикл while, мы получаем произвольную строку, размером указанном в параметре функции str_random()
$string .= 


Код функции:
function str_random($length)
{
    $string = '';

    while (($len = strlen($string)) < $length) {
        $size = $length - $len;

        $bytes = random_bytes($size);

        $string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size);
    }

    return $string;
}


Пример работы функции:

Запрашиваем случайную строку размером из 8 символов.
var_dump(str_random(8));


Результат:
string(8) "0cDuRI2T" 


Код функции на gitHub
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
  • Яндекс.Метрика
  • Счетчик PR-CY.Rank
  • Рейтинг@Mail.ru