¿Cómo crear cadenas PHP aleatorias?

0

Este tutorial muestra como crear una cadena aleatoria con PHP. El resultado de la función generadora de cadenas aleatorias que se va crear se puede usar como entrada de otra función que se encargue de dibujar imágenes del tipo CAPTCHA, crear contraseñas aleatorias para nuevos usuarios, etc.

Para este ejemplo se crea un archivo llamado captcha_string.php, se ubica en una carpeta del servidor web de pruebas y se le agrega las etiquetas de bloque de PHP.

<?php

?>

Luego se crea un función llamada get_ramdom_string para poder obtener una posible reutilización de código. Se le agrega un parámetro a esta función que permita indicar el número de caracteres de la cadena resultante. Este parámetro tendrá un valor por defecto en caso no se pase valores en la llamada.

<?php

function get_random_string($length = 6){
}

?>

Para poder generar cadenas aleatorias se necesita definir los posibles caracteres que pueden tener dichas cadenas aleatorias. Es por ello que se definen dos arreglos $cons y $voca que contienen todos los caracteres posibles separados por constantes y vocales respectivamente. Se realiza esta separación para que las cadenas aleatorias resultantes se puedan pronunciar aunque esta característica no es necesaria.

<?php

function get_random_string($length = 6){
    $cons = array('b','c','d','f','g','h','j','k','l',  
                  'm','n','p','r','s','t','v','w','x','y','z');
    $voca = array('a','e','i','o','u');
}

?>

Luego se llama a la función srand para poder configurar la semilla de aleatoriedad. Esta semilla de aleatoriedad necesita ser aleatoria también, es por eso que se le entrega como parámetro el valor resultante de la llamada a microtime multiplicado por un millón y casteado al tipo double. El resultado de llamar a microtime depende del instante de tiempo en el cual se llame a la función. Para mayor información acceder a PHP: microtime – Manual.

<?php

function get_random_string($length = 6){
    $cons = array('b','c','d','f','g','h','j','k','l',  
                  'm','n','p','r','s','t','v','w','x','y','z');
    $voca = array('a','e','i','o','u');
    
    srand((double)microtime()*1000000);
}

?>

Luego se crea una variable $password que contendrá la cadena resultante y se le asigna el valor inicial de cadena vacía. En seguida un bucle FOR se encargará de agregar en cada paso dos caracteres: una constante y una vocal, las cuales se obtienen aleatoriamente gracias a que se hace uso de la función rand para obtener el índice del arreglo ($cons y $voca) que se va asignar. La función rand permite obtener una valor pseudo-aleatorio que dependerá de una semilla, antes configurada haciendo uso de srand. Esta función rand toma dos parámetros que son los límites inferior y superior del rango de valores que puede devolver. Siempre devuelve valores enteros.

<?php

function get_random_string($length = 6){
    $cons = array('b','c','d','f','g','h','j','k','l',  
                  'm','n','p','r','s','t','v','w','x','y','z');
    $voca = array('a','e','i','o','u');
    
    srand((double)microtime()*1000000);
    
    $max = $length/2;
    $password = '';
    for($i=1;$i<=$max;$i++){
        $password .= $cons[rand(0,count($cons)-1)];
        $password .= $voca[rand(0,count($voca)-1)];
    }
}

?>

Se debe notar que la variable $max ha definido el número máximo de veces que se ejecuta el bucle FOR que en este caso, por agregar dos caracteres en cada paso, se debe ejecutar $length/2 veces cuando $length es un número par. En el caso de que sea impar,se va tener que agregar un caracter más al final. Esto se arregla creando un IF que compruebe que efectivamente el valor de $length es impar y agregando dicho caracter.

<?php

function get_random_string($length = 6){
    $cons = array('b','c','d','f','g','h','j','k','l',  
                  'm','n','p','r','s','t','v','w','x','y','z');
    $voca = array('a','e','i','o','u');
    
    srand((double)microtime()*1000000);
    
    $max = $length/2;
    $password = '';
    for($i=1;$i<=$max;$i++){
        $password .= $cons[rand(0,count($cons)-1)];
        $password .= $voca[rand(0,count($voca)-1)];
    }

    if(($length % 2) == 1) $password .= $cons[rand(0,count($cons)-1)];

    return $password;
}

?>

Luego como se puede ver se devuelve el valor de la variable $password. Bastaría en seguida llamar a la función entregándole un valor como parámetro y verificando en un navegador que realmente se obtiene lo que se buscaba. El código para llamar a la función e imprimir su valor sería el siguiente:

echo get_random_string(5);
Comparte este post.
Artículos Recomendados Para Tí:

Escribe tu comentario