Як згенерувати випадкове число (або рядок) в 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 символів. Цей спосіб генерації випадкових буквено-цифрових рядків дуже простий, але іноді такий спосіб не буде найбільш оптимальним.