Aleatoriedad en PHP

Veamos diferentes formas de generar números e identificadores aleatorios con PHP.

La función rand() es probablemente la más antigua para generar números enteros aleatorios.
Y aunque rand() se sigue usando ya está en desuso y ha pasado a ser un alias de la función mt_rand() que es mucho más eficiente.

La función rand() nos permite incluir un rango del número que queremos generar.

El número máximo que podremos generar es 2147483647 y puede ser obtenido usando la función getrandmax()

El algoritmo de generación de números aleatorios de la función mt_rand() es hasta cuatro veces más rápido pero no genera números criptográficamente seguros.


También podremos indicar un mínimo y un máximo el cual es definido por la función mt_getrandmax()

Y aunque mt_rand() solo genera números aleatorios enteros podremos ampliar su funcionalidad para generar decimales aleatorios.

También existen funciones como srand() para generar números aleatorios a partir de una semilla.

Su versión mejorada mt_srand() y debe ser usada antes de la función mt_rand().

Con la entrada a escena de PHP7 nos encontramos con la función random_int()

Esta si genera números pseudoaleatorios criptográficamente seguros y se podrían usar en programas de loterías, barajas, juegos, etc …
Para comprobar el mínimo y máximo quese puede generar es +-19223372036854775808  y puede ser obtenido usando PHP_INT_MIN y PHP_INT_MAX

Continuando con funciones que salieron con PHP7 también tenemos random_bytes() que genera bytes pseudoaleatorios y también criptográficamente seguros.

Al ser pseudoaleatorios estos podrían ser usados en herramientas criptográficas.
Le tendremos que pasar la longitud de la cadena que queremos generar.

Otra muy buena función para generar valores criptográficamente seguros es la función sino dispones de PHP7 en tu servidor es openssl_random_pseudo_bytes()

A esta le tendremos que pasar la longitud de la cadena que queremos generar.

También existe otra función llamada uniqid() que nos permitirá generar identificadores únicos.

Esta función genera un identificador basándose en la hora actual en microsegundos hasta un máximo de 13 caracteres.

Si queremos que estos valores sean mucho más precisos y no se repitan le podremos indicar un prefijo.


Y si añadimos entropía, su longitud se incrementará a 23 caracteres.


 

 

Deja una respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.