Genera cadenas aleatorias con PHP

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.