Ads

Medir a força de uma senha é relativamente simples. O método nativo match() do JavaScript permite encontrar determinados caracteres dentro de uma string.

Entenda o método match()

Por exemplo, vamos supor que eu precise encontrar a palavra Mundo dentro de uma string “Olá Mundo!”, teríamos algo como:

var texto="Olá Mundo!";
if (texto.match('Mundo')) alert('encontrei');

Agora que você entendeu como funciona o método, seguindo este mesmo raciocínio podemos criar uma cadeia de caracteres e usar o método match() para se uma cadeia possui determinados caracteres. Para isso precisamos definir quais são estas cadeias. Considerando que uma boa senha deve ter letras másculas, minúsculas, números e caracteres especiais ([email protected]#$%¨&*()_+-=) então podemos definir;

var numeros = /([0-9])/;
var alfabeto = /([a-zA-Z])/;
var chEspeciais = /([~,!,@,#,$,%,^,&,*,-,_,+,=,?,>,<])/;

Definindo as regras para medir a força da senha

Com as cadeias já definidas, basta aplicar uma estrutura de IF / ELSE para checar se a senha digitada utiliza ao menos 1 caractere de cada cadeia.

Outra regra que iremos definir é a senha deve ter no mínimo 6 caracteres.

Esta é uma ideia de como criar uma função seguindo as regras definidas acima;

function verificaForcaSenha() 
{
	var numeros = /([0-9])/;
	var alfabeto = /([a-zA-Z])/;
	var chEspeciais = /([~,!,@,#,$,%,^,&,*,-,_,+,=,?,>,<])/;

	if($('#password').val().length<6) 
	{
		$('#password-status').html("<span style='color:red'>Fraco, insira no mínimo 6 caracteres</span>");
	} else {  	
		if($('#password').val().match(numeros) && $('#password').val().match(alfabeto) && $('#password').val().match(chEspeciais))
		{            
			$('#password-status').html("<span style='color:green'><b>Forte</b></span>");
		} else {
			$('#password-status').html("<span style='color:orange'>Médio, insira um caracter especial</span>");
		}
	}
}

Aplicando o código

Como você pode perceber o código acima manipula dois elementos, identificados por #password e #password-status, aonde #password é o input na qual a senha é digitada e #password-status é aonde o resultado da verificação da força será exibida.

Obviamente você poderá mudar o nome destes identificadores, mas se optar por mante-los você precisa agora apenas acrescentar um input e um span ou div no seu formulário.

Observando também que temos a dependência do jQuery, então o código completo ficaria assim;

<label>Senha:</label>
<input type="password" id="password" minlength="6" maxlength="12" onKeyUp="verificaForcaSenha();" />
<span id="password-status"></span>
  
<script
  src="https://code.jquery.com/jquery-3.5.1.min.js"
  integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0="
  crossorigin="anonymous">
</script>
  
<script>
function verificaForcaSenha() 
{
	var numeros = /([0-9])/;
	var alfabeto = /([a-zA-Z])/;
	var chEspeciais = /([~,!,@,#,$,%,^,&,*,-,_,+,=,?,>,<])/;

	if($('#password').val().length<6) 
	{
		$('#password-status').html("<span style='color:red'>Fraco, insira no mínimo 6 caracteres</span>");
	} else {  	
		if($('#password').val().match(numeros) && $('#password').val().match(alfabeto) && $('#password').val().match(chEspeciais))
		{            
			$('#password-status').html("<span style='color:green'><b>Forte</b></span>");
		} else {
			$('#password-status').html("<span style='color:orange'>Médio, insira um caracter especial</span>");
		}
	}
}
</script>
Resultado do código

Exigindo senhas ainda mais fortes

Se você quiser exigir senhas ainda mais fortes a dica é separar a cadeia de caracteres de letras maiúsculas e minúsculas, desta forma você criará uma regra a mais para definir senhas fortes.

<script>
function verificaForcaSenha2() 
{
	var numeros = /([0-9])/;
	var alfabetoa = /([a-z])/;
	var alfabetoA = /([A-Z])/;
	var chEspeciais = /([~,!,@,#,$,%,^,&,*,-,_,+,=,?,>,<])/;


	if($('#password').val().length<6) 
	{
		$('#password-status').html("<span style='color:red'>Fraco, insira no mínimo 6 caracteres</span>");
	} else {  	
		if($('#password').val().match(numeros) && $('#password').val().match(alfabetoa) && $('#password').val().match(alfabetoA) && $('#password').val().match(chEspeciais))
		{            
			$('#password-status').html("<span style='color:green'><b>Forte</b></span>");
		} else {
			$('#password-status').html("<span style='color:orange'>Médio</span>");
		}
	}
}
</script>

Gerador de senhas

Você já conhece o gerador de senhas do Blogson? Em breve farei um artigo explicando o código. Além de medir a força da senha você poderá também criar um formulário com sugestões de senhas.

Se este artigo foi útil, por favor deixe um comentário. Até +.

Ads

Anderson Oliveira

Anderson Oliveira é desenvolvedor, escritor e docente no CEETPS - Centro Estadual de Educação Tecnologia de São Paulo. Atualmente trabalha na Administração Central do CPS e leciona aulas de programação na Etec Prof. Carmine Biagio Tundisi de Atibaia.