Як згенерувати випадкове число (або рядок) в PHP

При розробці додатку на мові програмування PHP досить часто доводиться створювати випадкові числа. Наприклад, щоб робити вибірку випадкового запису з бази даних, щоб створювати унікальний ідентифікатор користувача (або сеансу), щоб виводити випадкову картинку на сайті, щоб привласнювати випадкові назви файлам і т.д. Застосувань цього є досить багато.

Серверу (комп’ютеру) досить складно згенерувати дійсно випадкове значення. Щоб спростити йому завдання – вам потрібно буде надати комп’ютеру діапазон конкретних значень для вибору. Як ви розумієте, це трохи суперечить самому факту випадковості. Але, поки нічого кращого не придумано.

В сьогоднішній статті ми розглянемо практичне рішення питання по генерації випадкових чисел або ж випадкових буквено-цифрових рядків.

 

 

Генерація випадкових чисел в PHP

Для генерації випадкових чисел в PHP є 2 функції (або генератора). Перший генератор випадкових чисел – це класична функція rand(). Вона приймає два параметри: $min (найменше значення, яке може бути повернуто) і $max (найбільше значення, яке може бути повернуто).

Синтаксис функції:

<?php
echo rand(25, 1150);
// результатом буде випадкове число в діапазоні від 25 до 1150
?>

 

 

Другий генератор випадкових чисел в PHP – це поліпшена версія першої функції. Це функція mt_rand(). Скорочення MT походить від Mersenne Twister (вихору Мерсенна), по імені французького математика Марена Мерсенна. Ця функція менш передбачувана, ніж класична функція, а також вона працює трохи швидше (майже в 4 рази) за генератор rand().

Синтаксис функції:

<?php
mt_rand($min, $max);
// де $min – мінімальне значення випадкового числа
// а $max – максимальне значення випадкового числа
echo mt_rand(25, 1150);
// результатом буде випадкове число в діапазоні від 25 до 1150
?>

 

 

Криптографічно безпечні випадкові цілі числа

Починаючи з PHP версії 7.0 можна генерувати криптографічно безпечні псевдовипадкові цілі числа (тобто, числа, для яких випадковість результату дуже критична). Це робиться за допомогою функції random_int(), яка також приймає параметри $min та $max.

Синтаксис функції:

<?php
echo random_int(25, 1150);
// результатом буде псевдовипадкове ціле число в діапазоні від 25 до 1150
?>

 

 

Як згенерувати випадковий буквено-цифровий рядок в PHP

Для вирішення цього завдання в PHP існує досить багато способів. Ми ж розглянемо сьогодні тільки варіант створення випадкових рядків способом перетасування символів в рядку. Ми візьмемо фіксований набір символів, і згенеруємо випадкові буквено-цифрові рядки за допомогою функції str_shuffle($string). Врахуйте, що випадковий рядок, згенерований таким чином, не буде криптографічно безпечним. Проте, рядок в результаті буде досить непередбачуваним і його можна використовувати, наприклад, для генерації випадкових URL-адрес або паролів. Нижче один з прикладів використання:

<?php
$dozvoleni_simvoli = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
echo substr(str_shuffle($dozvoleni_simvoli), 0, 15);
// Можливий варіант результату: WpXq7uTs4ViJaxQ
?>

 

Ми просто перетасували рядок з допустимих символів, а потім взяли перші 15 символів. Цей спосіб генерації випадкових буквено-цифрових рядків дуже простий, але іноді такий спосіб не буде найбільш оптимальним.

 

This post was last modified on 04/09/2019 21:40

Останні пости

Стівен Кінг

Будь-яка проблема в житті — це перевірка наших можливостей Стівен Кінг  

21/05/2024

Вінстон Черчилль

Песиміст бачить труднощі у кожній можливості; оптиміст у будь-яких труднощах бачить можливості Сер Вінстон Леонард…

19/05/2024

Конфуцій

Коли вам здасться, що мета недосяжна, не змінюйте ціль — змінюйте свій план дій Конфуцій…

12/05/2024

Чарльз Дарвін

Виживає не найсильніший і не найрозумніший, а той, хто найкраще пристосовується до змін Чарльз Роберт…

11/05/2024

Що таке тег canvas в HTML5 і для чого він потрібен?

Елемент <canvas> з’явився лише в HTML5 і використовується для динамічного малювання графіки на веб-сторінці з…

10/05/2024

Ден Браун

Можливо все, — неможливе просто потребує більше часу Ден Браун  

09/05/2024