Generador de cadenas aleatorias PHP
Estoy intentando crear una cadena aleatoria en PHP y no obtengo ningún resultado con esto:
<?php
function RandomString()
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randstring = '';
for ($i = 0; $i < 10; $i++) {
$randstring = $characters[rand(0, strlen($characters))];
}
return $randstring;
}
RandomString();
echo $randstring;
¿Qué estoy haciendo mal?
Para responder a esta pregunta específicamente, dos problemas:
$randstring
no está dentro del alcance cuando lo repites.- Los personajes no se concatenan en el bucle.
Aquí hay un fragmento de código con las correcciones:
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[random_int(0, $charactersLength - 1)];
}
return $randomString;
}
Genere la cadena aleatoria con la siguiente llamada:
// Echo the random string.
// Optionally, you can give it a desired string length.
echo generateRandomString();
Tenga en cuenta que la versión anterior de esta respuesta utilizó
rand()
en lugar derandom_int()
y, por lo tanto, generó cadenas aleatorias predecibles. Entonces se cambió para que fuera más seguro, siguiendo los consejos de esta respuesta .
Nota:
str_shuffle()
utiliza internamenterand()
, que no es adecuado para fines de criptografía (por ejemplo, generar contraseñas aleatorias). En su lugar , desea un generador de números aleatorios seguro . Tampoco permite que los personajes se repitan.
Una manera más.
ACTUALIZADO (ahora esto genera cualquier longitud de cadena):
function generateRandomString($length = 10) {
return substr(str_shuffle(str_repeat($x='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($x)) )),1,$length);
}
echo generateRandomString(); // OR: generateRandomString(24)
Eso es todo. :)