Gerar senha aleatória complexa (PHP e Javascript)
[sourcecode language=”php”]
<?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;
}
?>
[/sourcecode]
[sourcecode language=”php”]
<?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′ );
?>
[/sourcecode]
Javascript
[sourcecode language=”html”]</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>
[/sourcecode]
Valeu! Obrigado mesmo.