Inicio Apuntes FPApuntes DAWGenerar passwords con PHP de manera aleatoria

Generar passwords con PHP de manera aleatoria

Publicado por entreunosyceros
Publicado el: Última actualización:

AVISO: Esta entrada tiene más de dos años desde su publicación. Es posible que el contenido esté desactualizado.

El post que dejo hoy es un pequeño generador de passwords con PHP de manera aleatoria. Este tipo de aplicaciones siempre viene bien tenerlos a mano.  Con este sencillo script PHP podremos obtener una serie de caracteres aleatorios de la longitud deseada y con la dificultad que seleccionemos ( solo letras, con números, con mayúsculas, con caracteres especiales ).

Este tipo de aplicaciones son perfectas para las webs que generen el password de los usuarios al registrarse y se lo manden por correo. Esto último ya es otras historia, por esto vamos a ver los dos archivos de los que se compone este ejemplo.

Generar passwords con PHP

Password.html

<head>
    <title>Generador de Passwords</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript">
    
    function validaForm(){
    	var errores = "";
    	var respuesta = true;
    	
		if( !$("input[name|='caracteres[]']").is(':checked') ){
			respuesta = false;
		 	errores += "Debes seleccionar al menos una opción \\n" ;
		}
		var numcaracteres = $("#numcaracteres").attr('value');
		
		if( numcaracteres == '' || ( numcaracteres < 6 || numcaracteres > 16 ) ){
			respuesta = false;
			errores += "Los caracteres para la contraseñaa deben estar entre 6 y 16 caracteres";
		}
		
		return '{"valor": ' + respuesta + ', "mensaje": "' + errores + '"}';
    }
    $(document).ready(function(){
        $("#btnGenerar").click(function(){
        	respuesta = validaForm();
        	respuesta = jQuery.parseJSON(respuesta);
        	if( respuesta.valor == true ){
            	$.ajax({
                	url: "password.php",
	                type: "POST",
            	  	data: $("#frmPasswords").serialize(),
                	dataType: "html",
	                success: function(password) {
    	                $("#txtPassword").attr('value',password);
        	        }
            	});
            } 
            else
            	alert(respuesta.mensaje);      	
        });
    });
    </script>
  </head>
  <body>
      <div>
          <h2> Generador de contraseñas </h2>
          <form id="frmPasswords">
              Selecciona los caracteres que quieres utilizar <br/>
              <input type="checkbox" name="caracteres[]" value="mayusculas" />A-Z<br/>
              <input type="checkbox" name="caracteres[]" value="minusculas" />a-z<br/>
              <input type="checkbox" name="caracteres[]" value="numeros" />0-9<br/>
              <input type="checkbox" name="caracteres[]" value="c_especiales" />?!*-_.%$/<br/>
              Num. de caracteres: <input type="text" name="numcaracteres" id="numcaracteres" size="2"/> <br/>              
              <input type="button" name="btnGenerar" id="btnGenerar" value="Generar"/>
          </form>
          Contraseña generada:<br/>
          <input type="text" name="txtPassword" id="txtPassword" value=""/>
      </div>
  </body>

Password.php

<?php
// Verifica que existan los datos que se enviaron desde el formulario
if(isset($_POST["caracteres"]) && isset($_POST["numcaracteres"])){
	
	//La informacion que se se recibe del formulario se almacena en variables
    $numcaracteres = $_POST["numcaracteres"];
    $caracteres = $_POST["caracteres"];
	
	// Verifica que el valor de $numcaracteres este entre 6 y 16
	if($numcaracteres >= 6 && $numcaracteres <= 16){
		//Se definen las variables con los caracteres a utilizar en la contraseña
    	$mayusculas = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	    $minusculas = "abcdefghijklmnopqrstuvwxyz";
    	$numeros = "0123456789";
	    $c_especiales = "?!*-+_%#/=()";

		/*   Para asegurar que se utilizen los valores seleccionados 
		 *   utilizo 2 variables para determinar cuantos caracteres 
		 *   de cada tipo se van a utilizar.
		 *   $aux almacena el numero de caracteres a utilizar por cada tipo,
         *   ese dato tiene que ser un numero entero por eso se redondea hacia 
		 *   abajo con la funcion floor
		 */ 
    	$aux = floor($numcaracteres / count($caracteres));
		
		/*   Al momento de hacer la division puede que haya quedado un residuo
		 *   ese se almacena en la variable $residuo
		 */   
	    $residuo = $numcaracteres % count($caracteres);
		
		// La bandera la utiliza para determinar si ya se utilizo el valor del residuo
    	$bandera = false;
    	
    	if($residuo != 0)
			$bandera = true;

		// Se crea un ciclo para ir generando los caracteres que contendra la contraseña 
    	
    	for($i=0; $i<count($caracteres); $i++){
            // Determina si se van a generar minúsculas para la contraseña
			if( $caracteres[$i] == "minusculas"){
            	/*  Determina si se va a utilizar el valor del residuo, si se va a utilizar
				 *  se le asigna a $max el valor de $aux + $residuo, en caso contrario
				 *  se asigna a $max solo la variable $aux.
				 * 
				 * 	Esto mismo se repite para mayúsculas, numeros, caracteres especiales
				 */ 
            	if($bandera){
                	$bandera = false;
	                $max = $aux + $residuo;
    	        }
        	    else 
            	    $max = $aux;
				
				//Genera los caracteres en minúsculas
	            for($x = 0; $x < $max; $x++)
					// Se almacenan en un array los valores que se generan
    	            $arraypassword[] = substr($minusculas, rand(0, strlen($minusculas)-1),1);
        	}
	        if( $caracteres[$i] == "mayusculas"){
    	        if($bandera){
        	        $bandera = false;
            	    $max = $aux+$residuo;
            	}
	            else
    	            $max = $aux;
        	    for($x = 0; $x < $max; $x++)
            	    $arraypassword[] = substr($mayusculas, rand(0, strlen($mayusculas)-1),1);
        	}
	        if( $caracteres[$i] == "numeros"){
    	        if($bandera){
        	        $bandera = false;
            	    $max = $aux+$residuo;
            	}
 	           else
    	            $max = $aux;
        	    for($x = 0; $x < $max; $x++)
            	    $arraypassword[] = substr($numeros, rand(0, strlen($numeros)-1),1);
	        }
    	    if( $caracteres[$i] == "c_especiales"){
        	    $max = $aux;
            	for($x = 0; $x < $max; $x++)
                	$arraypassword[] = substr($c_especiales, rand(0, strlen($c_especiales)-1),1);
	        }
    	}

		// Una vez que se genero la contraseña se desordena el array 
	    shuffle($arraypassword);
		// Se recorren todos los valores del array y se imprimen
    	foreach ($arraypassword as $caracter)
        	echo $caracter;
    }
}
?>

Si quieres ver un ejemplo de funcionamiento de este código puedes verlo en acción en el siguiente enlace.

Fuente.

También te puede interesar ...

Deja un comentario

* Al utilizar este formulario, aceptas que este sitio web almacene y maneje tus datos.

2 Comentarios

Pablo 3 noviembre, 2016 - 12:07 PM

Gracias para el aporte. PEro necesitaria que que generase un número determinado de contraseñas. Gracias

Respuesta
sapoclay 3 noviembre, 2016 - 1:26 PM

Hola. En primer lugar, gracias por la visita. Y después decirte que si necesitas que genere un número determinado de contraseñas, supongo que bastaría con añadirle un nuevo campo en el formulario y utilizar este campo como contador de contraseñas para generar. Salu2 y suerte.

Respuesta
Resumen de privacidad
cookies entreunosyceros

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible.

La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudarnos a comprender qué secciones de la web encuentras más interesantes y útiles.

Nunca almacenamos información personal de ningún tipo.

Tienes toda la información sobre privacidad, derechos legales y cookies en nuestra página sobre la política de privacidad o en la página sobre nuestra política de cookies.

Cookies necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Si desactivas esta cookie no podremos guardar tus preferencias. Esto significa que cada vez que visites esta web tendrás que activar o desactivar las cookies de nuevo.

Cookies de terceros

Esta web utiliza las siguientes cookies adicionales:

- Mailchimp: Recordar si ya estás suscrito al boletín de noticias y sino ofrecértelo al salir.

- Accesibilidad: Para saber tus ajustes de accesibilidad en cada visita.

- Comentarios: Saber si has leído y aceptado nuestra política de privacidad a la hora de dejar un comentario en la web.

- Google Analytics: Localización para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

- Goggle Adsense: Anuncios personalizados según tu geolocalización y preferencias.

Dejar estas cookies activadas nos permite mejorar nuestra web.

Adblock Detectado!!

Ayúdanos deshabilitando la extensión AdBlocker de tu navegador para visitar esta web.
Si no sabes hacerlo en Chrome, consulta el siguiente enlace. Si utilizas Firefox, puedes consultar este otro enlace.
Esto mejorará tu experiencia en este sitio web.