Para el uso de PHP 7+ 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
Pensé que el mínimo y el máximo para rand era la cantidad de dígitos a usar en lugar de números :) thnx
Val
Relacionado: si PHP_INT_MAX < ($max-$min), necesita sumar intervalos juntos, como se describe en esta respuesta .
obispo
rand () antes de PHP7.1 es simplemente malo. Utiliza el algoritmo LCG que da como resultado una salida predecible. También es lento. Dado que PHP7.1 rand () se convierte en un alias de mt_rand (), ya no está mal. PHP7 también introdujo random_int () criptográficamente seguro, sin embargo, debe evitarse a menos que sea esencial, ya que es mucho más lento que mt_rand ()
¡Eso es genial! Pero hasta que los servidores web admitan PHP7 de manera más global, esto no es útil para nadie que desarrolle productos para su distribución. Entonces, las respuestas anteriores que TAMBIÉN funcionan en PHP7 siguen siendo las mejores prácticas.
Matt Cromwell
1
@MattCromwell. No estoy de acuerdo contigo. Hasta que los servicios de apoyo de alojamiento PHP7 debemos utilizar para polyfill random_inty random_bytesfunción - github.com/paragonie/random_compat .
Vladimir Posvistelik
Tengo curiosidad, ¿alguna vez hay alguna razón para NO usar random_int ? Si da números aleatorios "mejores", ¿por qué no usarlo por razones no criptográficas?
Brian Leishman
1
@BrianLeishman Prefiero usarlo para todo. El único inconveniente que puedo adivinar: probablemente se basa en la fuente de la aleatoriedad y podría fallar si está fuera de la aleatoriedad. Puede que sea más caro (es necesario comprobarlo) pero dudo que esta función haga una gran diferencia
Salvador Dali
Sé que es más lento, pero es lo suficientemente insignificante como para no volver atrás y cambiar las random_intsa existentes por rands. 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
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).
random_int()
,random_bytes()
oopenssl_random_pseudo_bytes()
. como dijo @Salvador Dalirand()
no generan resultados criptográficamente seguros. Ver documentación php.net/manual/en/function.rand.phpRespuestas:
<?php $min=1; $max=20; echo rand($min,$max); ?>
fuente
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 )
lo que básicamente hace obsoletas las respuestas anteriores.
fuente
random_int
yrandom_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 porrand
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 predeciblesUna versión
másrá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).
fuente
o
http://php.net/manual/en/function.rand.php
fuente
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 }
fuente
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.fuente
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; }
fuente