CakeFest 2024: The Official CakePHP Conference

rand

(PHP 4, PHP 5, PHP 7, PHP 8)

randГенерирует случайное число

Описание

rand(): int
rand(int $min, int $max): int

Функция rand() возвращает псевдослучайное целое число в диапазоне от 0 до значения, которое возвращает функция getrandmax(), если функцию вызвали без параметров min и max. Вызовите rand(5, 15), если нужно случайное число между 5 и 15 (включительно).

Предостережение

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

Если нужна криптографически безопасная случайная последовательность, можно использовать класс Random\Randomizer с движком Random\Engine\Secure. Для простых сценариев существуют функции random_int() и random_bytes() с удобным API криптографически безопасного генератора псевдослучайных чисел (CSPRNG), поддерживаемого операционной системой.

Замечание: На отдельных платформах, например ОС Windows, функция getrandmax() возвращает максимальное целое число, значение которого не превышает 32 767. Если нужно число из диапазона больше, чем 32 767, указывают параметры min и max, которые разрешат создать число из большего диапазона, или вместо этой функции вызывают функцию mt_rand().

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

Список параметров

min

Наименьшее возвращаемое значение. По умолчанию: 0.

max

Наибольшее возвращаемое значение. По умолчанию: значение, которое возвращает функция getrandmax().

Возвращаемые значения

Функция возвращает псевдослучайное значение в диапазоне от min (или 0) до max (или значение функции getrandmax()).

Список изменений

Версия Описание
7.2.0 В функции rand() испрвили ошибку смещения по модулю. То есть последовательности, которые сгенерировали с конкретным начальным значением, могут несовпадать со значениями, которые сгенерировали в PHP 7.1 на 64-битных машинах.
7.1.0 Функция rand() стала синонимом функции mt_rand().

Примеры

Пример #1 Пример использования функции rand()

<?php

echo rand(), "\n";
echo
rand(), "\n";

echo
rand(5, 15), "\n";

?>

Вывод приведённого примера будет похож на:

7771
22264
11

Примечания

Внимание

Диапазон minmax не должен выходить за границы значения, которое возвращает функция getrandmax(). То есть (maxmin) <= getrandmax(). В противном случае функция rand() может возвращать менее качественные случайные числа.

Смотрите также

  • srand() - Задаёт начальное число генератора псевдослучайных чисел
  • getrandmax() - Возвращает максимально возможное случайное число
  • mt_rand() - Генерирует случайное значение методом с помощью генератора простых чисел на базе Вихря Мерсенна
  • random_int() - Получает криптографически безопасное равномерно выбранное целое число
  • random_bytes() - Получает криптографически безопасные случайные байты

add a note

User Contributed Notes 4 notes

up
3
play dot it at play-it dot net
1 year ago
Here is a simple base64 random string function

<?php
function random_string($length) {
$str = random_bytes($length);
$str = base64_encode($str);
$str = str_replace(["+", "/", "="], "", $str);
$str = substr($str, 0, $length);
return
$str;
}

/*
Example outputs for random_string(32)

OP0vOJEsSvr6wbgN4jIwqMMstlpMSUsl
2IHaIxD2W4VTKZuzioudbpQCALdl6Ym6
QY0eZ3QYy3OKKN6ttzbDwAwsAfkXfQ2f
jznjlPCUDbYzOTJysPP414BbdVNu4jmT
GlktgJ8JUhdH5MfQ1PHl0wnqXQlKggQs
Pb9WALM3KcGCCPBKXsPgNfy3M0Xj4aEu
AED6OTVl8aBbspdxoXvA1sT4ein8lruH
9cSbz4FhoI4qSsPZFMh0u1rWDDEgQxI2
iSBlT4K7Ad516qPXgPReSj2tii7TAK5b
DuX8HByMb2e8IdM4j49Td2JTI9Ki7o1C
*/
?>
up
3
relsqui at armory dot com
19 years ago
Don't forget, it's faster to use bitwise operations when you need a random number that's less than some power of two. For example,

<?php
rand
()&1;
// instead of
rand(0,1);
// for generating 0 or 1,

rand()&3;
// instead of
rand(0,3);
// for generating 0, 1, 2, or 3,

rand()&7;
// instead of
rand(0,7)
// for generating 0, 1, 2, 3, 4, 5, 6, or 7,
?>

and so on. All you're doing there is generating a default random number (so PHP doesn't have to parse any arguments) and chopping off the piece that's useful to you (using a bitwise operation which is faster than even basic math).
up
-5
Anonymous
3 years ago
Note that the algorithm change in version 7.1.0 broke the repeatability of a random sequence initialized with a given value. For example if you have a program like:

<?php
srand
($argv[1]);
for (
$i = 0; $i < 10; $i++) {
echo
rand().PHP_EOL;
}
?>

It will will no longer produce the same results after version 7.1.0. This can be very important for some kinds of simulations. Hopefully you were using mt_rand() or something better all along, otherwise you will have some digging to do if you want your program to be able to repeat simulations from the pre-7.1.0 days... You will need to look in the PHP source archives to discover the algorithm they used to use and replicate it in your program.
up
-11
Anonymous
14 years ago
Generate a random 5 character A-Z0-9 string

<?php
for ($i=0; $i<6; $i++) {
$d=rand(1,30)%2;
echo
$d ? chr(rand(65,90)) : chr(rand(48,57));
}
?>

# php -r 'for ($i=0; $i<6; $i++) { $d=rand(1,30)%2; echo $d ? chr(rand(65,90)) : chr(rand(48,57)); } echo "\n";'
14BW1A
To Top