C'è un modo per generare un numero casuale basato su un minimo e un massimo?
Ad esempio, se min era 1 e max 20 dovrebbe generare qualsiasi numero compreso tra 1 e 20, inclusi 1 e 20?
C'è un modo per generare un numero casuale basato su un minimo e un massimo?
Ad esempio, se min era 1 e max 20 dovrebbe generare qualsiasi numero compreso tra 1 e 20, inclusi 1 e 20?
random_int()
, random_bytes()
o openssl_random_pseudo_bytes()
. come ha detto @Salvador Dali rand()
non generano risultati crittograficamente sicuri. Vedere la documentazione php.net/manual/en/function.rand.php
Risposte:
<?php
$min=1;
$max=20;
echo rand($min,$max);
?>
PHP_INT_MAX < ($max-$min)
, è necessario aggiungere intervalli insieme, come descritto in questa risposta .
In un nuovo PHP7 c'è finalmente un supporto per interi pseudo-casuali crittograficamente sicuri.
int random_int ( int $min , int $max )
random_int - Genera interi pseudo-casuali crittograficamente sicuri
il che sostanzialmente rende obsolete le risposte precedenti.
random_int
e random_bytes
function - github.com/paragonie/random_compat .
random_int
? Se fornisce numeri casuali "migliori", perché non usarlo per ragioni non crittografiche?
random_int
s già esistenti in rand
s. Inoltre, il mio caso d'uso è un algoritmo di ripetizione e sicuramente non voglio che più funzioni non riuscite si raggruppino dopo aver dormito a causa di int casuali prevedibili
Una versione più veloce più veloce userebbe mt_rand:
$min=1;
$max=20;
echo mt_rand($min,$max);
Fonte: http://www.php.net/manual/en/function.mt-rand.php .
NOTA: il tuo server deve avere il modulo Math PHP abilitato affinché funzioni. In caso contrario, bug il tuo host per abilitarlo, o devi usare il normale (e più lento) rand ().
Ho raggruppato le risposte qui e l'ho reso indipendente dalla versione;
function generateRandom($min = 1, $max = 20) {
if (function_exists('random_int')):
return random_int($min, $max); // more secure
elseif (function_exists('mt_rand')):
return mt_rand($min, $max); // faster
endif;
return rand($min, $max); // old
}
rand(1,20)
I documenti per la funzione rand di PHP sono qui:
http://php.net/manual/en/function.rand.php
Utilizzare la srand()
funzione per impostare il valore iniziale del generatore di numeri casuali.
Prova questo. Genererà l'ID secondo il tuo desiderio.
function id()
{
// add limit
$id_length = 20;
// add any character / digit
$alfa = "abcdefghijklmnopqrstuvwxyz1234567890";
$token = "";
for($i = 1; $i < $id_length; $i ++) {
// generate randomly within given character/digits
@$token .= $alfa[rand(1, strlen($alfa))];
}
return $token;
}