20 de dezembro de 2025

Validador de Senhas

Validando se uma senha é segura, utilizando o Arduino.


A ideia é simples: o usuário digita uma senha pelo Monitor Serial e o Arduino analisa com base em algumas regras, como tamanho mínimo, presença de números, letras maiúsculas e caracteres especiais.

O objetivo principal é trabalhar conceitos básicos de programação, como:

  • Uso do tipo char, analisando a senha caractere por caractere
  • Comparações lógicas para identificar letras, números e outros caracteres
  • Uso de variáveis booleanas como flags, marcando se determinada regra já foi atendida ou não

Simples, sem sensores e outros componentes, é para quem está começando e quer entender como o computador lê e interpreta textos, aplicando regras simples para resolver um problema real.

👉Compile esse fonte no Arduino, abra o Monitor Serial e digite as senhas para a lógica verificar se é uma senha válida ou não.

A sugestão é mexer no código. Mude o tamanho mínimo da senha, tente exigir mais de um número e mais de uma letra maiúscula. Crie novas validações.

A ideia é usar o Arduino para pensar como programador, da mesma forma que fizemos em outros projetos, como a Calculadora de Cores de Resistores e o projeto Loterias.

Segue o código fonte com comentários para entendimento.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/*---------------------------------------------------------
  Programa : VALIDADOR DE SENHA
  Autor    : Fellipe Couto [ http://www.efeitonerd.com.br ]
  Data     : 20/12/2025
  ---------------------------------------------------------*/

void setup() {
  //Inicia a comunicação serial
  Serial.begin(115200);

  //Delay para garantir que o Monitor Serial conecte
  delay(1000);

  //Mensagens iniciais
  Serial.println("VALIDADOR DE SENHA");
  Serial.println("www.efeitonerd.com.br");
  Serial.println("Regras da senha:");
  Serial.println("- Minimo 6 caracteres");
  Serial.println("- Pelo menos 1 numero");
  Serial.println("- Pelo menos 1 letra");
  Serial.println("- Pelo menos 1 letra MAIUSCULA");
  Serial.println("- Pelo menos 1 caractere especial");
  Serial.println("\nDigite uma senha:");
}

void loop() {
  //Verifica se existe algum dado vindo pela Serial
  if (Serial.available() > 0) {

    //Lê a linha digitada até o ENTER (\n) e retorna uma String inteira
    String senha = Serial.readStringUntil('\n');

    //Remove espaços do início e fim
    senha.trim();

    //Se o usuário só apertar ENTER, ignora
    if (senha.length() == 0) {
      Serial.println("Nada foi digitado.");
      return;
    }

    //Variáveis booleanas iniciadas como false e serão ativadas conforme a análise da senha
    bool temLetra = false;
    bool temNumero = false;
    bool temMaiuscula = false;
    bool temEspecial = false;

    //Valida o tamanho mínimo da senha
    if (senha.length() < 6) {
      Serial.println("Senha invalida: menos de 6 caracteres");
      Serial.println("\nDigite outra senha:");
      return;
    }

    //Loop para analisar a senha caractere por caractere
    for (int i = 0; i < senha.length(); i++) {

      //char é um tipo que representa um caractere. Aqui pegamos um único caractere da String
      char c = senha.charAt(i);

      //Verifica se o caractere é um número. '0' até '9' são códigos ASCII consecutivos
      bool isNumero = (c >= '0' && c <= '9');

      //Verifica se é letra minúscula. 'a' até 'z' são valores consecutivos na tabela ASCII
      bool isLetraMinuscula = (c >= 'a' && c <= 'z');

      //Verifica se é letra maiúscula. 'A' até 'Z' são valores consecutivos na tabela ASCII
      bool isLetraMaiuscula = (c >= 'A' && c <= 'Z');

      //Se for letra minúscula ou maiúscula, então é letra
      bool isLetra = isLetraMinuscula || isLetraMaiuscula;

      //Atualiza as variáveis conforme o tipo do caractere
      if (isNumero)
        temNumero = true;

      if (isLetra)
        temLetra = true;

      if (isLetraMaiuscula)
        temMaiuscula = true;

      //Caractere especial: se não é letra e não é número, então é especial
      if (!isLetra && !isNumero)
        temEspecial = true;
    }

    // Validação final da senha
    if (temLetra && temNumero && temMaiuscula && temEspecial) {
      Serial.println("Senha valida!");
      delay(1000);
    } else {
      Serial.println("Senha invalida:");

      if (!temLetra) {
        Serial.println("- Falta letra");
      }

      if (!temNumero) {
        Serial.println("- Falta numero");
      }

      if (!temMaiuscula) {
        Serial.println("- Falta letra MAIUSCULA");
      }

      if (!temEspecial) {
        Serial.println("- Falta caractere especial");
      }
    }

    Serial.println("\nDigite outra senha:");
  }
}

Nenhum comentário:

Postar um comentário