Generador de cadenas aleatorias PHP

Resuelto Captain Lightning asked hace 54 años • 69 respuestas

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?

Captain Lightning avatar Jan 01 '70 08:01 Captain Lightning
Aceptado

Para responder a esta pregunta específicamente, dos problemas:

  1. $randstringno está dentro del alcance cuando lo repites.
  2. 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 de random_int()y, por lo tanto, generó cadenas aleatorias predecibles. Entonces se cambió para que fuera más seguro, siguiendo los consejos de esta respuesta .

Stephen Watkins avatar Dec 04 '2010 22:12 Stephen Watkins

Nota: str_shuffle()utiliza internamente rand(), 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. :)

A. Cheshirov avatar Nov 03 '2012 20:11 A. Cheshirov