Generamos cadenas aleatorias con PHP.
Resumen.
Una de las cosas más recurrentes a la hora de crear un sitio Web es la generación de valores aleatorios o más bien, seudoaleatorios. Conoceremos la diferencia entre aleatorio y seudoaleatorio y podremos generar dichos valores de una forma muy rápida con una simple función.Artículo.
Aunque no tiene relevancia en términos de programación, mas de una vez, allá en mis inicios con PHP me salió el concepto de valor seudoaleatorio, cuando yo, como la mayoría de programadores, solo pensamos en términos de aleatorio.
La diferencia entre aleatorio y seudoaleatorio estriba mas en el método de obtención del valor, que en el valor en cuanto tal. Pongamos un ejemplo, si le pido a un amigo que saque de una bolsa opaca, por supuesto, una de las 10 bolas numeradas que hay dentro, obtengo una bola aleatoria. Si le pido a mi amigo que extraiga de la misma bolsa una bola, pero que la que saque sea la primera que toque, entonces esa bola es seudoaleatoria.
Y diréis ahora, ¿y que diferencia hay entre uno y otro caso? Pues la diferencia es simple, mi amigo ha recibido instrucciones sobre como obtener la bola, sencillamente indicarle que coja la primera que toque, es lo que convierte a esa bola en seudoaleatoria, aunque puede ser cualquier bola y puede tener marcado cualquier valor.
Por tanto, si existe alguna instrucción, tenemos algún valor seudoaleatorio, si no existe ninguna instrucción, tenemos un valor aleatorio.
Así, los lenguajes de programación, y PHP es uno de ellos, siguen un conjunto de instrucciones para generar ese valor, por tanto, desde el mundo informático, solo obtendremos valores seudoaleatorios.
Y dicho esto, vamos a lo nuestro, ¿cómo lo haremos?
Con el objetivo que esta función nos sirva para generar cualquier posible rango de valores para crear nuestra cadena aleatoria vamos a crear un array que contenga en cada valor un conjunto de caracteres para formar la cadena aleatoria.
Si quisiéramos agregar un nuevo conjunto de caracteres solo tenemos que agregar un elemento mas al array con los valores deseados.
Con la variable $contam_carts contamos el número de caracteres que hay en el grupo elegido y seguidamente calculamos la clave del array de mayor valor restando 1, dado que el primer elemento del array es cero.
Mediante el bucle for, (que lo podemos usar dado que la key del array es numérica y continua, es decir, no falta ninguna key, todas son consecutivas) recorremos el conjunto de caracteres y elegimos un valor aleatorio de key en cada iteración. Todos esos valores los unimos mediante la concatenación .= y con esto, ya tenemos nuestro valor aleatorio formado con los elementos de cada conjunto.
Y la función es esta:
La diferencia entre aleatorio y seudoaleatorio estriba mas en el método de obtención del valor, que en el valor en cuanto tal. Pongamos un ejemplo, si le pido a un amigo que saque de una bolsa opaca, por supuesto, una de las 10 bolas numeradas que hay dentro, obtengo una bola aleatoria. Si le pido a mi amigo que extraiga de la misma bolsa una bola, pero que la que saque sea la primera que toque, entonces esa bola es seudoaleatoria.
Y diréis ahora, ¿y que diferencia hay entre uno y otro caso? Pues la diferencia es simple, mi amigo ha recibido instrucciones sobre como obtener la bola, sencillamente indicarle que coja la primera que toque, es lo que convierte a esa bola en seudoaleatoria, aunque puede ser cualquier bola y puede tener marcado cualquier valor.
Por tanto, si existe alguna instrucción, tenemos algún valor seudoaleatorio, si no existe ninguna instrucción, tenemos un valor aleatorio.
Así, los lenguajes de programación, y PHP es uno de ellos, siguen un conjunto de instrucciones para generar ese valor, por tanto, desde el mundo informático, solo obtendremos valores seudoaleatorios.
Y dicho esto, vamos a lo nuestro, ¿cómo lo haremos?
Con el objetivo que esta función nos sirva para generar cualquier posible rango de valores para crear nuestra cadena aleatoria vamos a crear un array que contenga en cada valor un conjunto de caracteres para formar la cadena aleatoria.
Si quisiéramos agregar un nuevo conjunto de caracteres solo tenemos que agregar un elemento mas al array con los valores deseados.
Con la variable $contam_carts contamos el número de caracteres que hay en el grupo elegido y seguidamente calculamos la clave del array de mayor valor restando 1, dado que el primer elemento del array es cero.
Mediante el bucle for, (que lo podemos usar dado que la key del array es numérica y continua, es decir, no falta ninguna key, todas son consecutivas) recorremos el conjunto de caracteres y elegimos un valor aleatorio de key en cada iteración. Todos esos valores los unimos mediante la concatenación .= y con esto, ya tenemos nuestro valor aleatorio formado con los elementos de cada conjunto.
Y la función es esta:
Esperamos os resulte útil a la hora desarrollar vuestros proyectos.<?php /* Funcion creada por ArtesaniaWeb.es Generamos cadenas aleatorias con determinados conjuntos de caracteres */ function Gen_Aleator($Conj_Caract, $N_caract){ $Conjuntos = array( 0=>'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_,;.:(){}[]#/?&%', 1=>'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', 2=>'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789', 3=>'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789', 4=>'abcdefghijklmnopqrstuvwxyz0123456789', 5=>'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 6=>'abcdefghijklmnopqrstuvwxyz', 7=>'ABCDEF0123456789', 8=>'abcdef0123456789', 9=>'0123456789' ); $contam_carts = strlen($Conjuntos[$Conj_Caract]); // Cuenta caracteres de los conjuntos $max_key = $contam_carts - 1; // Key de mayor valor del array $aleatorio = null; for($w=0; $w<$N_caract; $w++){ $aleatorio .= substr($Conjuntos[$Conj_Caract],mt_rand(0,$max_key),1); } return $aleatorio; } // Ejecutamos la funcion $conjunto = 7; // Clave del array del conjunto de caracteres a usar 0 la 9 $n_caract = 6; // Numero de caracteres que tendrá la cadena aleatoria $valor = Gen_Aleator($conjunto, $n_caract); // Tambien la podemos ejecutar con los valores en la misma funcion $valor1 = Gen_Aleator(2, 4); echo "$valor<br />$valor1"; ?>
Tags: Faw || aleatorio || seudoaleatorio || función