¿Hay alguna forma de generar un número aleatorio basado en un mínimo y un máximo?
Por ejemplo, si el mínimo era 1 y el máximo 20, debería generar cualquier número entre 1 y 20, incluidos 1 y 20.
¿Hay alguna forma de generar un número aleatorio basado en un mínimo y un máximo?
Por ejemplo, si el mínimo era 1 y el máximo 20, debería generar cualquier número entre 1 y 20, incluidos 1 y 20.
random_int()
, random_bytes()
o openssl_random_pseudo_bytes()
. como dijo @Salvador Dali rand()
no generan resultados criptográficamente seguros. Ver documentación php.net/manual/en/function.rand.php
Respuestas:
<?php
$min=1;
$max=20;
echo rand($min,$max);
?>
PHP_INT_MAX < ($max-$min)
, necesita sumar intervalos juntos, como se describe en esta respuesta .
En un nuevo PHP7 hay finalmente un soporte para enteros pseudoaleatorios criptográficamente seguros.
int random_int ( int $min , int $max )
random_int - Genera enteros pseudoaleatorios criptográficamente seguros
lo que básicamente hace obsoletas las respuestas anteriores.
random_int
y random_bytes
función - github.com/paragonie/random_compat .
random_int
? Si da números aleatorios "mejores", ¿por qué no usarlo por razones no criptográficas?
random_int
sa existentes por rand
s. Además, mi caso de uso es un algoritmo de reintento, y definitivamente no quiero que se agrupen múltiples funciones fallidas después de dormir debido a entradas aleatorias predecibles
Una versión más rápida usaría mt_rand:
$min=1;
$max=20;
echo mt_rand($min,$max);
Fuente: http://www.php.net/manual/en/function.mt-rand.php .
NOTA: Su servidor necesita tener habilitado el módulo Math PHP para que esto funcione. Si no es así, inserte un error en su host para que lo habilite, o tendrá que usar el rand () normal (y más lento).
He agrupado las respuestas aquí y la he hecho independiente de la versión;
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)
Los documentos para la función rand de PHP están aquí:
http://php.net/manual/en/function.rand.php
Utilice la srand()
función para establecer el valor inicial del generador de números aleatorios.
Prueba este. Generará una identificación de acuerdo con su deseo.
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;
}