Gerar senha aleatória complexa (PHP e Javascript)

<?php
function randomPassword(
$length = 10,
$chars = ’0123456789abcdefghijkLMNPRSTUWXY!@$&*()-+_={}[]:;<>?,.’
)
{
$password = ”;

for ( $i = 0; $i < $length; $i++ ) {
$chars = str_shuffle( $chars );
$char = $chars[0];
$password .= $char;
}

return strlen( $password ) < $length
? randomPassword( $length, $chars )
: $password;
}
?>


Descrição:
Gere senhas randônicas extremamente complexas, combinando números, letras e símbolos.
Sintaxe:
randomPassword( int $length, string $chars[optional] )
Parâmetros:
length: Número de caracteres da senha;
chars: Caracters a serem combinados;
Exemplos:
<?php
// Senha com 10 caracteres,
// letras, números e símbolos
echo randomPassword();

// Senha com 6 caracteres,
// letras, números e símbolos
echo randomPassword( 6 );

// Senha com 6 caracteres e
// apenas letras
echo randomPassword( 6, ‘abcdefghijkLMNPRSTUWXY’ );

// Senha com 6 caracteres e letras e números
echo randomPassword( 6, ‘abcdefghijkLMNPRSTUWXY1234567890′ );
?>

Javascript

</pre>
<pre id="codigoFonte"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt-br" lang="pt-br">
  <head>
    <title>Gerador de senhas</title>

    <script type="text/javascript">
      <!--
      // função dec2hex: converte números decimais em números hexadecimais
      function dec2hex(numero) {
        var base = 16;
        var digito = new Array();
        var i = 0;

        while (numero != 0) {
          i++;
          digito[i] = numero % base;
          numero = Math.floor(numero / base);
        }
        value = "";
        while (i >= 1)  {
          switch (digito[i]) {
            case 10: { value += "A"; break }
            case 11: { value += "B"; break }
            case 12: { value += "C"; break }
            case 13: { value += "D"; break }
            case 14: { value += "E"; break }
            case 15: { value += "F"; break }
            default: { value += digito[i]; break }
          }
          i--;
        }
        return value;
      }

      function GerarSenha() {
        document.forms[0].senha.value = "";
        tamanho = document.forms[0].digitos.value;

        // validar o campo *dígitos*
        if (tamanho < 1 || isNaN(tamanho)) {
          alert("Escolha um valor numérico válido para esse campo");
          document.forms[0].digitos.focus();
          document.forms[0].digitos.select();
          return;
        }

        // ajusta o tamanho (em pixels) do campo de acordo com o número de dígitos
        document.forms[0].senha.style.width = (tamanho * 9) + "px";

        // códigos ASCII decimais
        min = 32;
        max = 126;

        for (i = 1; i <= tamanho; i++) {
          caracter = min + Math.floor((Math.random() * (max - min)));  // 32 a 126
          caracter = "%" + dec2hex(caracter);
          caracter = unescape(caracter);
          document.forms[0].senha.value += caracter;
          document.getElementById("aguarde").innerHTML = "aguarde...";
        }
        document.getElementById("aguarde").innerHTML = "";
      }
      //-->
    </script>

    <style type="text/css">
      <!--
      * {font: 11px Verdana}
      .campo1 {width: 180px}
      .campo2 {width: 40px}
      .campo1, .campo2 {border: solid 1px #CCC}
      .botao {border: solid 1px #BBB; background-color: #EEE; cursor: pointer}
      #aguarde {font-style: italic}
      -->
    </style>
  </head>

  <body>
    <form action="#" onsubmit="GerarSenha(); return false">
      Senha: <input type="text" name="senha" size="30" readonly="readonly" />  
      <input type="submit" value="Gerar senha" /><br /><br />
      Dígitos: <input type="text" value="20" name="digitos" size="3" maxlength="2" />
    </form><br />
    <div id="aguarde"></div>
  </body>
</html>

Uma ideia sobre “Gerar senha aleatória complexa (PHP e Javascript)”

Deixe sua resposta