Случайные числа. Производит генерацию случайного числа

Для формирования случайного числа можно использовать функцию PHP rand() или mt_rand(). Требование использования случайных чисел часто возникает на практике для именования переменных, файлов, создания ключевой информации, обеспечения безопасности.

Случайность и уникальность

Функция PHP random представлена двумя вариантами: rand() и mt_rand(). Считается, что алгоритм в первом случае более прост и генерирует псевдослучайные числа. Второй вариант имеет более быстрый алгоритм и известные математические характеристики. В большинстве случаев, когда нужно получить случайное число, можно использовать серию вызовов PHP random и получить уникальную комбинацию цифр.

Если взять за основу цифры от 1 до 26 или от 1 до 32 и получать их случайным образом, то можно сформировать ключевую информацию как последовательность букв латиницы или кириллицы. В этом случае PHP random - это способ формирования последовательности алфавитной информации, например, для целей тестирования каналов связи или алгоритмов.

Случайное число редко бывает уникальным, поскольку оно может появляться многократно согласно закону распределения случайной величины. Но если совместить, в частности, статическую переменную PHP & Math.random языка JavaScript, то можно получить реальное уникальное случайное число, которое не будет повторяться во времени.

Использование функции времени

Функция времени, как PHP, так и JavaScript, позволяет формировать уникальные комбинации цифр, редко когда в один момент времени может произойти достаточно большое количество событий и случайная величина будет повторяться.

Применяя PHP random в диапазоне секунд или миллисекунд при большом диапазоне возможных значений, можно получить уникальные случайные комбинации цифр или букв. Что еще?

Сочетая значение функции времени, последовательно растущее число и PHP random или можно обеспечить надежную безопасность каналов связи клиента и сервера, создать уникальные коды для переменных, сформировать непредсказуемые события в алгоритмах.

Генератор случайных чисел PHP - отличное решение для большинства задач, особенно когда нужно быстро получить качественный результат с минимальными затратами. Использование функций rand() и mt_rand в совокупности с последовательно растущими рядами чисел или значениями времени позволяет получить случайные числа как повторяющиеся по значениям, так и уникальные.

Задача
Необходимо сгенерировать случайное число в пределах числового диапазона.

Решение
Для этого предназначена функция mt_rand():

// случайное число между $upper и $lower, включительно
$random_number = mt_rand($lower, $upper);

Обсуждение
Генерация случайных чисел полезна, когда надо вывести на экран случайную картинку, случайным образом назначить стартовую точку в игре, выбрать случайную запись из базы данных или сгенерировать уникальный идентификатор сессии. Для того чтобы сгенерировать случайное число в интервале между двумя точками, надо передать функции mt_rand() два аргумента:

$random_number = mt_rand(1, 100);

Вызов функции mt_rand() без аргументов возвращает число между нулем и максимальным случайным числом, возвращенным функцией mt_getrandmax(). Компьютеру трудно сгенерировать действительно случайное число. Намного лучше он умеет методически следовать инструкциям и не так хорош, если от него требуются спонтанные действия. Если необходимо заставить компьютер выдать случайное число, то нужно дать ему определенный набор повторяемых команд, при этом сам факт повторяемости делает достижение случайности менее вероятным.

PHP имеет два различных генератора случайных чисел: классическую функцию под именем rand() и более совершенную функцию mt_rand().

MT (Mersenne Twister) – это генератор псевдослучайных чисел, названный в честь французского монаха и математика Марена Мерсенн (Marin Mersenne), исследовавшего простые числа. На этих простых числах и основан алгоритм данного генератора. Функция mt_rand() работает быстрее, чем функция rand(), и дает более случайные числа, поэтому мы отдаем предпочтение первой из них.

Если у вас версия PHP более ранняя, чем 4.2, то перед тем как первый раз вызвать функцию mt_rand() (или rand()), нужно инициализировать генератор начальным значением путем вызова функции mt_srand() (или srand()). Начальное значение – это число, которое случайная функция использует как основу для генерации возвращаемых ею случайных чисел; это относится к способу разрешения упомянутой выше дилеммы – повторяемость против случайности.

В качестве начального значения, меняющегося очень быстро и с малой вероятностью повторяемости (именно этими свойствами должно характеризоваться хорошее начальное значение), можно взять значение, возвращенное высокоточной функцией времени microtime(). Генератор достаточно инициализировать один раз. PHP 4.2 и более поздних версий автоматически управляет инициализацией, но если начальное значение устанавливается вручную перед первым вызовом функции mt_rand(), то PHP не заменяет его своим собственным начальным значением.

Если нужно выбрать случайную запись из базы данных, то проще всего сначала определить общее количество полей в таблице, выбрать случайное число из этого диапазона, а затем запросить эту строку из базы данных:

$sth = $dbh->query("SELECT COUNT(*) AS count FROM quotes");
if ($row = $sth->fetchRow()) {
$count = $row;
} else {
die ($row->getMessage());
}
$random = mt_rand(0, $count - 1);
$sth = $dbh->query("SELECT quote FROM quotes LIMIT $random,1");
while ($row = $sth->fetchRow()) {
print $row .

"\n";
}

Этот фрагмент кода определяет общее количество строк в таблице, генерирует случайное число из этого диапазона, а затем использует LIMIT $random,1 для выбора (SELECT) одной строки из таблицы, начиная с позиции $random. В MySQL версии 3.23 или выше возможен альтернативный вариант:

$sth = $dbh->query("SELECT quote FROM quotes ORDER BY RAND() LIMIT 1");
while ($row = $sth->fetchRow()) {
print $row . "\n";
}

В этом случае MySQL сначала располагает строки в случайном порядке, а затем возвращает первую строку.

Всем привет! В этой статье мы рассмотрим, что нового появилось для генерации случайных чисел в PHP 7.1 .

Это обновление произошло невидимо для разработчиков, однако улучшило язык программирования PHP в области генерации случайных чисел.

Насколько известно, в PHP мы можем использовать функцию rand(min, max) для генерации случайных чисел:

Echo rand(7, 17);

Если вы теперь будете обновлять страницу, то каждый раз будете получать новое случайное число.

Но не все так просто, как может показаться. Дело в том, что в зависимости от того, для чего вы генерируете случайное число, функция rand() использует разные системы генерации. Т.е. она зависит от системы, в которой используется. Некоторые системы могут использовать слабые методы генерации, соответственно, вы будете получать не совсем случайные числа.

В PHP 7.1 эта проблема была исправлена и была добавлена функция mt_rand() :

Echo mt_rand(7, 17);

Эта функция работает гораздо лучше, включая безопасность. Что также важно знать, это то, что, если вы используете функцию rand() в PHP 7.1 , то она автоматически будет перезаписана на mt_rand() . Т.е. rand() теперь просто алиас для mt_rand() .

Многие другие функции для получения случайных результатов были улучшены в PHP 7.1 . Например, давайте рассмотрим, как мы можем получить случайное значение из массива:

$names = ["Ivan", "Alexander", "Vasiliy"];
echo $names;

Т.е. любые функции, такие, как эта, были улучшены для получения более качественных случайных чисел в PHP 7.1 . Да, это обновление прошло незаметно, но, на каком бы вы языке не писали, очень важно понимать, что происходит внутри какой-нибудь функции и как она себя ведет.

У меня уже спрашивали пару раз, как я делаю случайный вывод цитат у себя на сайте в блоке "Умные цитаты ". Далее мне удалось выяснить, что проблема здесь с непониманием людей, как вывести случайный элемент из массива в PHP . Задача простая, но тем не менее, раз возникают вопросы, то надо на них отвечать.

Сразу приведу код. Допустим, есть массив с набором цитат. И нужно выбрать одну случайную из них и вывести:

$quotes = array(); // Инициализируем пустой массив
$quotes = "Будьте внимательны к своим мыслям, они - начало поступков."; // Первая цитата
$quotes = "Выживает не самый умный или самый сильный, а самый восприимчивый к переменам."; // Вторая цитата
$quotes = "Жизнь - гора: поднимаешься медленно, спускаешься быстро."; // Третья цитата
$quotes = "Люди не хотят быть богатыми, люди хотят быть богаче других."; // Четвёртая цитата
$number = mt_rand(0, count($quotes) - 1); // Берём случайное число от 0 до (длины массива минус 1) включительно
echo $quotes[$number]; // Выводим цитату
?>

Ключевой момент - это получение случайного числа . Всё, что нужно сделать, это задать правильные границы. Если нужно выбрать на всей длине массива случайный элемент, то это от 0 до (длины массива минус 1 ). А далее просто вытащить элемент из массива с полученным случайным индексом .

Что касается задачи с цитатами, то их лучше хранить в базе данных. В принципе, если сайт совсем простой, то можно и в текстовом файле. Но если в базе данных, то лучше использовать RAND() и LIMIT в SQL-запросе , чтобы Вы сразу получали единственную и случайную цитату из базы данных.