¿Hay alguna manera de generar un número aleatorio basado en un mínimo y máximo?Número aleatorio en el rango [min - max] usando PHP
Por ejemplo, si min fue 1 y max 20 debería generar cualquier número entre 1 y 20, incluyendo 1 y 20?
¿Hay alguna manera de generar un número aleatorio basado en un mínimo y máximo?Número aleatorio en el rango [min - max] usando PHP
Por ejemplo, si min fue 1 y max 20 debería generar cualquier número entre 1 y 20, incluyendo 1 y 20?
<?php
$min=1;
$max=20;
echo rand($min,$max);
?>
pensé que min y max para rand era la cantidad de dígitos para usar en lugar de números :) thnx – Val
Relacionado: si 'PHP_INT_MAX <($ max- $ min) ', debe agregar intervalos juntos, como se describe en [esta respuesta] (http://stackoverflow.com/questions/31252637/what-is-phps-mt-rand-minimum-value-and- how-to-calculate-32-bit-interger-on-32). – bishop
rand(1,20)
Docs para la función rand de PHP son aquí:
http://php.net/manual/en/function.rand.php
Utilice la función srand()
para establecer el valor de inicialización del generador de números aleatorios.
Una versión más rápida
más rápido 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 lo hace, inserte un error en su host para habilitarlo o use el rand normal (y más lento)().
quieres decir más rápido ¿no? la diferencia es (mecanografiar == más rápido vs más rápido == rendimiento sabio) – Val
Sí, más rápido. Corrección válida –
Pruebe este. Generará id de acuerdo a tu 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;
}
En un nuevo PHP7 hay un fin un soporte para un cryptographically secure pseudo-random integers.
int random_int (int $min , int $max)
random_int - Genera enteros seudo-aleatorios criptográficamente seguros
que básicamente hace que las respuestas anteriores obsoletos .
¡Eso es genial! Pero hasta que los webhosts soporten PHP7 más globalmente, esto no es útil para cualquiera que construya productos para la distribución desafortunadamente.Por lo tanto, las respuestas anteriores que TAMBIÉN funcionan en PHP7 siguen siendo las mejores prácticas. –
@MattCromwell. No estoy de acuerdo contigo. Hasta que los servicios de hosting sean compatibles con PHP7, deberíamos utilizar polyfill para las funciones 'random_int' y' random_bytes' - https://github.com/paragonie/random_compat. –
Tengo curiosidad, ¿hay alguna vez una razón para NO usar 'random_int'? Si proporciona números aleatorios "mejores", ¿por qué no usarlos por razones no criptográficas? –
He incluido las respuestas aquí y las he hecho independientes;
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
}
La nueva versión de php tiene un generador de números aleatorios criptográficamente seguro (http://stackoverflow.com/a/31421151/1090562). –
Para PHP 7+ use 'random_int()', 'random_bytes()', o 'openssl_random_pseudo_bytes()'. como @Salvador Dali dijo 'rand()' no genera resultados criptográficamente seguros. Ver documentación http://php.net/manual/en/function.rand.php – FrozenFire