feed twitter facebook LinkedIn facebook

PHP » Contraseña aleatoria con php

marzo 28, 2011 por Jose Sevilla 2 Comentarios Imprimir Imprimir

En algunos casos, nos vemos con la necesidad de crear de un conjunto de caracteres alfanuméricos para un uso específico posterior. Un uso habitual podría ser para generar una contraseña aleatoria en un nuevo registro de tu web.

Primero, creamos dos variables que puedes personalizar a tu necesidad.

  1. $caracteres='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  2. $longpalabra=8;

Puedes personalizar la longitud de la contraseña a generar con la variable $longpalabra, y los caracteres que compondrán la contraseña en la variable $caracteres.

A continuación, creamos un bucle para obtener un valor aleatorio en cada ciclo y que se detenga cuando consigamos la longitud deseada.

  1. for($pass='', $n=strlen($caracteres)-1; strlen($pass) < $longpalabra ; ) {
  2. $x = rand(0,$n);
  3. $pass.= $caracteres[$x];
  4. }

Para conseguir el resultado, hemos usado el método de bucle for que nos ofrece PHP, siendo uno de los ciclos más completos, ya que nos permite usar tres expresiones en su sintaxis.

Sintaxis de un ciclo for:

  1. for (expresion1; expresion2; expresion3) {
  2. sentencia
  3. }
  • La primera expresión se ejecutará una única vez al iniciar el ciclo. Puede contener varias expresiones separadas por coma.
  • La segunda expresión será evaluada antes de iniciar el ciclo, si su valor obtenido es TRUE el ciclo se ejecutará hasta que el valor obtenido sea FALSE. En el caso de tener varias expresiones separadas por coma, únicamente tendrá en cuenta el valor de la última expresión.
  • La tercera expresión se ejecutará cada vez que se termine el ciclo. Puede contener varias expresiones separadas por coma.

Si os fijáis en el código, en la primera expresión la aprovechamos para crear la variable vacía que almacenará nuestra contraseña generada, y para contar los caracteres con la función strlen() a la que restamos un valor añadiendo -1 ya que cuando utilicemos la cadena de texto mas adelante, el primer carácter al igual que sucede con un array corresponde el número 0 y no al número 1. Por ejemplo, podemos contar 20 caracteres pero en la variable estarán asignándolos del 0 al 19, y no del 0 al 20 que sumarían 21.

En la segunda expresión del código, aprovechamos para poner nuestra condición.

Dentro de la sentencia, la función rand() nos dará como resultado un numero aleatorio desde el 0 al número de caracteres disponibles, el cual utilizaremos para añadir el valor a la variable donde almacenamos nuestra contraseña.

Ya podemos usar nuestra contraseña almacenada en la variable $pass.

El código completo sería:

  1. $caracteres='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
  2. $longpalabra=8;
  3. for($pass='', $n=strlen($caracteres)-1; strlen($pass) < $longpalabra ; ) {
  4. $x = rand(0,$n);
  5. $pass.= $caracteres[$x];
  6. }
  7. print 'Nuestra contraseña obtenida es: ' . $pass;