CascadiaPHP 2024

rand

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

randGera um número inteiro aleatório

Descrição

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

Se chamado sem os argumentos opcionais min, max rand() retorna um número inteiro pseudo-aleatório entre 0 e getrandmax(). Se você quiser um número aleatório entre 5 e 15 (inclusive), por exemplo, use rand(5, 15).

Cuidado

Esta função não gera valores criptograficamente seguros e não deve ser usada para propósitos criptográficos ou fins que exijam que os valores retornados sejam impossíveis de adivinhar.

Se aleatoriedade criptograficamente segura for necessária, a classe Random\Randomizer pode ser usada com o mecanismo Random\Engine\Secure. Para casos de uso simples, as funções random_int() e random_bytes() fornecem uma API conveniente e segura que é garantida pelo CSPRNG do sistema operacional.

Nota: Em algumas plataformas (como Windows), getrandmax() é apenas 32767. Se você precisar de um intervalo maior que 32767, especificar min e max permitirá a você criar um intervalo maior que esse ou considere usar mt_rand() no lugar.

Nota: A partir do PHP 7.1.0, rand() usa o mesmo gerador de números aleatórios que mt_rand(). Para preservar a compatibilidade com versões anteriores, rand() permite que max seja menor que min em vez de retornar false como mt_rand().

Parâmetros

min

O menor valor a ser retornado (padrão: 0)

max

O valor mais alto a ser retornado (padrão: getrandmax())

Valor Retornado

Um valor pseudoaleatório entre min (ou 0) e max (ou getrandmax(), inclusive).

Registro de Alterações

Versão Descrição
7.2.0 rand() recebeu uma correção para um bug de defasagem de módulo. Isso significa que as sequências geradas com uma semente específica podem ser diferentes do PHP 7.1 em máquinas de 64 bits.
7.1.0 rand() foi transformado em um apelido de mt_rand().

Exemplos

Exemplo #1 Exemplo de rand()

<?php
echo rand(), "\n";
echo
rand(), "\n";

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

O exemplo acima produzirá algo semelhante a:

7771
22264
11

Notas

Aviso

O intervalo min max deve estar dentro do intervalo getrandmax(). Ou seja, (max - min) <= getrandmax() Caso contrário, rand() poderá retornar números aleatórios de baixa qualidade.

Veja Também

  • srand() - Semeia o gerador de números aleatórios
  • getrandmax() - Mostrar o maior valor aleatório possível
  • mt_rand() - Gera um valor aleatório através do Gerador de Números Aleatórios Mersenne Twister
  • random_int() - Obtém um número inteiro selecionado uniformemente e criptograficamente seguro
  • random_bytes() - Obtém bytes aleatórios criptograficamente seguros

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