Як згенерувати випадкове число (або рядок) в 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
Останні пости
Ремонт чи купівля нової шини? Варіанти ремонту гуми
Заплатка на шині, як правило, є простим і дешевим варіантом порівняно з покупкою нового колеса,…
Збірні швидкомонтовані будинки — основне, що потрібно знати
Щось готове до вживання, як от піца чи локшина, вже давно зайняло почесне місце в…
Популярність, переваги та сфери застосування металосайдингу
Сьогодні акцент на екологічному дизайні та матеріалах має високі показники та популярність. Дизайнери обирають екологічно…
У чому різниця між веб-дизайнером та веб-розробником?
Дуже часто не розуміють різницю між веб-дизайнерами та веб-розробниками, та й взагалі її наявність. А…
Переваги навчання у приватній школі
Кожна дитина унікальна з неповторним набором інтересів, здібностей та талантів. Приватні школи допомагають побачити можливості…