En este tutorial aprenderemos a genera cadenas aleatorias con números, letras mayúsculas y minúsculas o símbolos en PHP.
Estos métodos nos ayudaran a generar opciones para nombre de usuario, de archivos o contraseñas seguras.
Método 1
En este método utilizaremos la función str_shuffle() para reordenar aleatoriamente una cadena, la cual es compatible con PHP 5 o superior.
En una variable definimos todos los caracteres que se pueden utilizar (numeros, letras mayúsculas y minúsculas o símbolos).
<?php $caracteres_permitidos = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $longitud = 12; echo substr(str_shuffle($caracteres_permitidos), 0, $longitud); ?>
Resultado:
Y0okcQ6BW1wx
La función str_shuffle() barajea aleatoriamente toda la cadena de caracteres permitidos y con la función substr() extraemos los primero caracteres dependiendo de la longitud que necesitemos.
La cadena generada no es criptográficamente segura pero sí bastante impredecible.
Método 2
En este método utilizaremos la función random_int() la cual genera números enteros seudoaleatorios criptográficamente seguros, los cuales nos ayudaran a elegir posiciones aleatoria de los caracteres.
<?php $caracteres_permitidos = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; $longitud = 16; //Recibe los caracteres permitidos y la longitud de la cadena (predefinida 16). function generarCadenaAleatoria($caracteres, $longitud = 16) { $longitud_caracteres = strlen($caracteres); $cadena_aleatoria = ''; for ($c = 0; $c < $longitud; $c++) { $cadena_aleatoria .= $caracteres[random_int(0, $longitud_caracteres - 1)]; } return $cadena_aleatoria; } echo generarCadenaAleatoria($caracteres_permitidos, $longitud); ?>
Resultado:
2t1xfLB3u5YmIcLA
La cadena generada es criptográficamente segura pero dependerá de los caracteres que utilicemos y la longitud establecida. Entre más caracteres permitidos y longitud, mayor será la seguridad.
La función random_int() es compatible con PHP 7 o supeior, para versiones anteriores se puede utilizar la función mt_rand() o rand(), solo que estas funciones no generan valores criptográficos fiables.