PHP – Usando RAND() para crear una cadena aleatoria

La función RAND() en php nos devuelve un numero aleatorio al azar de 0 hasta el máximo posible (getrandmax() para saber cual es el mayor numero posible) entre sus usos puede ser crear un dado para juegos en donde deberíamos indicar que el mínimo es 1 y el máximo será 6

<?php
$numerodado = rand(1,6); //nos dará 1,2,3,4,5 o 6
echo $numerodado;
?>

otro uso es por ejemplo mostrar un banner de manera aleatorio o que rote

<?php
switch (rand(1,5))
    case 1: 
        $titleimage = "/images/banners13/1.gif"; 
        break; 
    case 2: 
        $titleimage = "/images/banners13/2.gif"; 
        break; 
    case 3: 
        $titleimage = "/images/banners13/3.gif"; 
        break; 
    case 4: 
        $titleimage = "/images/banners13/4.gif"; 
        break;    
    case 5: 
        $titleimage = "/images/banners13/5.gif"; 
        break;  
}
/*una manera más corta del SWITCH de arriba seria:
$titleimage = "/images/banners13/".rand(1,5).".gif";*/
?>

Aquí el código para Generar una cadena de forma aleatoria, por ejemplo un password autogenerado.

<?php
$caracteres = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"; //posibles caracteres a usar
$numerodeletras=10; //numero de letras para generar el texto
$cadena = ""; //variable para almacenar la cadena generada
for($i=0;$i<$numerodeletras;$i++)
{
    $cadena .= substr($caracteres,rand(0,strlen($caracteres)),1); /*Extraemos 1 carácter de los caracteres 
entre el rango 0 a Numero de letras que tiene la cadena */
}
echo $cadena;
?>

Posted

in

by

Comments

20 respuestas a “PHP – Usando RAND() para crear una cadena aleatoria”

  1. Alejandro Avatar
    Alejandro

    Muy bien pensado. Cuando lei el titulo pensaba en que lo harias mediante los valores decimales de cada letra en la tabla ASCII, pero como tu lo has hecho es mucho mas facil.

  2. Marco Avatar

    una duda cual es el codigo para almacenar la variable?

  3. David Avatar

    En el autogenerado de contraseña final…creo que lo habéis hecho más difícil de lo que podría ser, os podríais haber ahorrado el bucle por ejemplo. Mi código es este:

    $caracteres = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890”;
    $desordenada = str_shuffle($caracteres);
    $password = substr($desordenada, 1, 10);
    echo $password;
    ?>

    Con la funcion str_shuffle() desordenamos la cadena, por lo que siempre pillamos del puesto 1 hasta el 10, pero al desordenarse cada vez, nunca saldrá la misma contraseña. Lo he probado y funciona muy bien, y creo que es bastante más fácil, aunque si es para recordar como usar bucles y todo eso esta bien.

    Os habla un novatillo jeje, espero haber ayudado.

    1. Manuel Avatar

      Muy buena idea David. En lo personal las dos son buenas pero esta parece gastar menos recursos.

    2. Pedro Avatar
      Pedro

      Después de tanto estar buscando, me salva tu código. Muchas gracias.

  4. David Avatar

    No se si te refieres a:
    $var = rand(1,10);

    En este caso $var tendrá un valor aleatorio entre 1 y 10, podría ser 3, 5, 7, o 1.. será aleatorio cada vez que se ejecute el archivo.php

  5. Jorge Suarez Torres Avatar
    Jorge Suarez Torres

    Excelente código. Pocas veces dejo un comentario y solo lo hago cuando funciona la solución encontrada y esta acorde con el objetivo que se desea alcanzar.

  6. ruben Avatar
    ruben

    buen aporte chicos, tengo una gran duda como puedo crear variables (nuevas) dentro de un rutina en php, como por ejemplo, en cierta linea de mi codigo que se genere una variable llamada $materia1, $materia2, $materia3 o cualquier otro numero dependera eso de unos datos que saque deuna base de datos en mysql. saludosy gracias.

    1. Jhonnyf Avatar
      Jhonnyf

      lo que pides si es posible, pero para eso existe los arrays, $arreglo[1], $arreglo[2], etc, ademas que existen funciones que te pueden ayudar como foreach, y un sin fin de posibilidades con arrays,

      en tal caso lo que pides si es posible y aqui te dejo el codigo de ejemplo:

      Contenido de string como variable

      “;

      echo $prueba1;

  7. ruben Avatar
    ruben

    Gracias Jhonnyf, no solo por tu aporte, si no resolverlo de manera que yo tenia idea y ademas por la manera mas viable de lo array. Me queda muy claro, muy agradecido.

  8. ruben Avatar
    ruben

    Otra pregunta, lo he visto en foreach donde explicas Jonnyf los arrays, que significa “=>”; gracias de antemano por tu respuesta.

    1. Jhonnyf Avatar
      Jhonnyf

      El foreach al usarlo con arrays, puedes recorrer los elementos o elementos y su índice, y la sintaxis es como la muestro, es decir: foreach ($array as $clave=>$elemento) El “=>” es parte de la sintaxis

  9. ANGEL Avatar
    ANGEL

    David tu codigo anda mejor

  10. edibmx Avatar
    edibmx

    muy ingeniosa la solucion te felicito, excelente post!!

  11. camilo Avatar
    camilo

    buenas como puedo hacer un formulario donde introduzca un codigo guardado en una base de datos y me lo verifique

  12. JOEL Avatar
    JOEL

    una pregunta como puedo hacer para que genere nombres aleatorios por ejemplo jun,maria,altagracias…

  13. juan Avatar

    como puedo hacer una rand con palabras predefinidas?

  14. Armando Avatar
    Armando

    Excelente amigo!

  15. Eva Mª Fernández Ramos Avatar
    Eva Mª Fernández Ramos

    Yo voy a dejar el código que he pensado para generar un número aleatorio entre 1 y 10.99 con dos decimales. Espero que os pueda servir
    <?php
    // $e guarda un número aleatorio entre 1 y 10 (parte entera)
    $e=rand(1,10);

    // $ce guarda el string del número aleatorio $e
    $ce= (string) $e;

    /* $d1 guarda un número aleatorio entre 0 y 9 (decimal 1)*/
    $d1=rand(0,9);

    //$cd1 guarda el string del número aleatorio $d1
    $cd1= (string) $d1;

    /* $d2 guarda un número aleatorio entre 0 y 9 (decimal 2)*/
    $d2=rand(0,9);

    //$cd2 guarda el string del número aleatorio $d2
    $cd2= (string) $d2;

    /*$cnum guarda la cadena del número decimal como string*/
    $cnum= $ce.".".$cd1.$cd2;

    /* $nota almacena el número decimal (float) de la cadena $cnum*/
    $nota= (float) $cnum;

    echo $nota."”;

    if ($nota<5){

    echo "Suspenso";
    }
    elseif ($nota<6){

    echo "Suficiente";
    }
    elseif ($nota<7)
    {
    echo "Bien";
    }
    elseif ($nota

  16. Eva Mª Fernández Ramos Avatar
    Eva Mª Fernández Ramos

    En realidad del código para generar un número aleatorio de dos decimales sería este, el anterior lo he incluido en un script para escribir la calificación de la nota aleatoria

    // $e guarda un número aleatorio entre 1 y 10 (parte entera)
    $e=rand(1,10);

    // $ce guarda el string del número aleatorio $e
    $ce= (string) $e;

    /* $d1 guarda un número aleatorio entre 0 y 9 (decimal 1)*/
    $d1=rand(0,9);

    //$cd1 guarda el string del número aleatorio $d1
    $cd1= (string) $d1;

    /* $d2 guarda un número aleatorio entre 0 y 9 (decimal 2)*/
    $d2=rand(0,9);

    //$cd2 guarda el string del número aleatorio $d2
    $cd2= (string) $d2;

    /*$cnum guarda la cadena del número decimal como string*/
    $cnum= $ce.”.”.$cd1.$cd2;

    /* $nota almacena el número decimal (float) de la cadena $cnum*/
    $nota= (float) $cnum;

    echo $nota;

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *