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