Generar contraseña aleatoria con PHP
En todo proyecto web que requiera un registro e inicio de sesión de usuarios, sería un detalle y queda mucho más profesional permitir también a estos usuarios poder recuperar su contraseña.
Puede darse el caso de que el usuario vuelva a tu sitio web después de 1 año y no recuerde la contraseña que introdujo en aquel momento.
Desde mi punto de vista, la opción de permitir recuperar la contraseña no puede faltar en ningún proyecto que requiera registro de usuarios.
Si la contraseña está encriptada en la base de datos, que sería lo lógico, será prácticamente imposible recuperarla en su formato original a no ser que se guarde también sin encriptar. Esto último no lo recomiendo.
La idea sería ofrecer una solución híbrida que no sea insegura para el usuario como, por ejemplo, que a través de su email se le pueda enviar por correo electrónico una contraseña nueva generada de forma aleatoria.
En este artículo te voy a enseñar la función que utiliza en todos mis proyectos hechos a medida para generar contraseñas de forma aleatoria.
Función generar contraseña aleatoria
Esta función recibe un único parámetro y no es más que la longitud de caracteres que tendrá la contraseña que se generará de forma aleatoria.
¿Cuál es la lógica de la función que genera una contraseña aleatoria?
- Definimos la variable $key vacía.
- Definimos la variable $pattern con una cadena con los números del 0 al 9 y las letras del abecedario en minúsculas.
- En la variable $max asignamos la longitud de la cadena $pattern.
- Iteramos hasta la la variable $length que recibe como parámetro la función.
- Rellenamos la variable $key con un carácter seleccionado aleatoriamente de la cadena $pattern usando la función mt_rand() de PHP que justamente permite generar un número entero aleatorio.
- La función substr() es clave para seleccionar la posición exacta donde se encuentra el carácter seleccionado aleatoriamente. Esta función es muy útil ya que devuelve parte de una cadena. En este caso, tan solo nos interesa devolver un carácter.
- Cuando se sale del bucle, se retorna la variable $key que contiene la cadena o contraseña aleatoria.
Generar una contraseña aleatoria más segura
Para generar una contraseña aleatoria más segura puedes seguir usando la misma función pero puedes ampliar con mayúsculas y caracteres especiales la variable $pattern.
Por ejemplo:
$pattern = "1234567890abcdefghijklmñnopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ.-_*/=[]{}#@|~¬&()?¿";
Conclusiones
Si quieres que tus usuarios sigan utilizando tus aplicaciones o páginas webs, es muy buena idea ayudarles a recuperar su contraseña si se da el caso de que no pueden entrar porque ya no se acuerdan o la han perdido.
La funcionalidad que permite recuperar contraseñas a los usuarios es más importante de lo que crees.
A menudo, se piensa que no es importante y es una funcionalidad que siempre se deja para el final y es posible que quede en el olvido y nunca se desarrolle. Pues vengo a decirte que puedes perder clientes potenciales si tu aplicación o página web no ofrece esta solución.
Situémonos en el ejemplo de una tienda online sin esta característica. Soy un cliente que se registró hace 1 año y ahora no me acuerdo de la contraseña. Quiero comprar pero no existe la posibilidad de recuperar mi contraseña. Pierdes la venta en caliente. Mal asunto.
¿Qué opinas? ¿Es importante para ti esta función? ¿Tienes alguna función mejor? Compártela y ayuda a la comunidad.
Jose! es una pena que a estas alturas desconozcas realmente como funciona strlen.
Y en consecuencia te arriesgues sin probarlo a publicar ‘Generar una contraseña aleatoria más segura’.
No obstante! no estoy aqui para dar clases, seguro que ya sabras por donde voy.
Saludos
Hola Antonio,
La verdad es que no te entiendo. ¿qué problema tienes con la función strlen? Quizá me he perdido algo.
Saludos
Excelente código. Muchas gracias. Suple la necesidad que tengo. Es funcional cuando se genera la contraseña por primera vez. La función md5() se utiliza cuando el registro ya tiene la contraseña y se necesita validar contra la base de datos como ocurre con los LOGIN de acceso a una aplicación. Saludos desde Bogotá, Colombia.
Me parece muy buen código, garantiza que la contraseña sea de la longitud deseada y los caracteres sean los que uno quiera, solo veo un detalle en el for, el rango del rand debe ser de 0 a 61.
Gracias por el aporte.
buen dia si yo no quiero que la contrasena sea aleatoria? yo quiero que me genere para cada usuario una contrasena? y cada vez que yo meta el mismo usuario me genere la misma contrasena? me puede ayudar…?
Hola,
Una solución rápida para cubrir tu necesidad es utilizar la función md5() de php para guardar de forma cifrada la contraseña. Puedes hacer algo así:
$password = md5($nombre_usuario);
Saludos
Simple y perfecto
!es simplemente sencillo y sencillamente perfecto!
I don’t usually comment but I gotta tell thankyou for the post on this perfect one : D.