rand
(PHP 4, PHP 5, PHP 7)
rand — Генерирует случайное число
Описание
$min
, int $max
)
При вызове без параметров min
и max
,
возвращает псевдослучайное целое в диапазоне от 0 до getrandmax().
Например, если вам нужно случайное число между 5 и 15 (включительно),
вызовите rand(5, 15).
Замечание: На некоторых платформах (таких как Windows) getrandmax() всего лишь 32767. Чтобы расширить диапазон, используйте параметры
min
иmax
, или обратитесь к функции mt_rand().
Список параметров
-
min
-
Наименьшее значение, которое может быть возвращено (по умолчанию: 0)
-
max
-
Наибольшее значение, которое может быть возвращено (по умолчанию: getrandmax())
Возвращаемые значения
Псевдослучайное значение в диапазоне от min
(или 0) до max
(или getrandmax()).
Примеры
Пример #1 Пример использования rand()
<?php
echo rand() . "\n";
echo rand() . "\n";
echo rand(5, 15);
?>
Результатом выполнения данного примера будет что-то подобное:
7771 22264 11
Примечания
Данная функция не генерирует криптографически безопасные значения и не должна использоваться в криптографических целях. Если вам требуется криптографически безопасное значение, подумайте об использовании функции openssl_random_pseudo_bytes() вместо данной.
Смотрите также
- srand() - Изменяет начальное число генератора псевдослучайных чисел
- getrandmax() - Возвращает максимально возможное случайное число
- mt_rand() - Генерирует случайное значение методом mt
- openssl_random_pseudo_bytes() - Generate a pseudo-random string of bytes
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Математические расширения
- Математические функции
- abs
- acos
- acosh
- asin
- asinh
- atan2
- atan
- atanh
- base_convert
- bindec
- ceil
- cos
- cosh
- decbin
- dechex
- decoct
- deg2rad
- exp
- expm1
- floor
- fmod
- getrandmax
- hexdec
- hypot
- intdiv
- is_finite
- is_infinite
- is_nan
- lcg_value
- log10
- log1p
- log
- max
- min
- mt_getrandmax
- mt_rand
- mt_srand
- octdec
- pi
- pow
- rad2deg
- rand
- round
- sin
- sinh
- sqrt
- srand
- tan
- tanh
Коментарии
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).
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
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.
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
*/
?>