Validar contraseña en C

En este ejercicio de programación en C vamos a ver cómo validar una contraseña, revisando que la misma cumpla con lo siguiente:

  1. La longitud de la contraseña debe medir entre 8 y 12 caracteres
  2. Debe contener al menos una letra y un número

Verás que podremos validar la seguridad de la contraseña muy fácil usando ANSI C.

Explicación del algoritmo

Para ver si la contraseña tiene al menos un número y al menos una letra vamos a crear 2 funciones ayudantes que nos dirán justamente eso.

Dentro de esas funciones vamos a recorrer la contraseña letra por letra y comprobar si la letra actual (dentro del ciclo) es letra o es un número, dependiendo de la función. Para ello usaremos isalpha y la función isdigit.

Basta con que encontremos el número o letra para que la función se detenga, pero si acaba de recorrer la cadena y no se detuvo porque no encontró lo buscado entonces la misma regresará false.

Finalmente ya dentro de la función que valida la contraseña en C vamos a llamar a esas funciones y además comprobar si la longitud de la contraseña está entre 8 y 12.

Saber si contiene al menos una letra y un número

Veamos a continuación los siguientes métodos programados con C:

int contieneAlMenosUnNumero(char cadena[MAXIMA_LONGITUD_CADENA])
{
    int indice = 0;
    while (cadena[indice] != '\0')
    {
        char actual = cadena[indice];
        if (isdigit(actual))
        {
            return 1;
        }
        indice++;
    }
    return 0;
}

int contieneAlMenosUnaLetra(char cadena[MAXIMA_LONGITUD_CADENA])
{
    int indice = 0;
    while (cadena[indice] != '\0')
    {
        char actual = cadena[indice];
        if (isalpha(actual))
        {
            return 1;
        }
        indice++;
    }
    return 0;
}

En este caso las funciones son muy parecidas pero uno comprueba con isalpha y otro con isdigit.

Como ya dije anteriormente, esto es para saber si la cadena tiene al menos una letra y para saber si la misma tiene un número, respectivamente.

Validar contraseña con C

Y ahora veamos la función que hace todo el trabajo y usa las 2 funciones anteriores. Cabe recalcar que esta función devolverá un booleano indicando si la contraseña es o no válida.

int esPalabraSecretaValida(char palabraSecreta[MAXIMA_LONGITUD_CADENA])
{
    if (strlen(palabraSecreta) < 8 || strlen(palabraSecreta) > 12)
    {
        return 0;
    }
    if (!contieneAlMenosUnaLetra(palabraSecreta) || !contieneAlMenosUnNumero(palabraSecreta))
    {
        return 0;
    }
    return 1;
}

Lo primero que hacemos es comprobar la longitud de la cadena. Yo lo hago con strlen pero tú puedes calcular la longitud manualmente.

Después, si no contiene al menos una letra o no contiene al menos un número, regresamos false (0).

Finalmente si pasó las validaciones anteriores regresamos un 1 (true), es decir, un verdadero.

Poniendo todo junto

El código completo junto con algunos ejemplos de su implementación quedan como se ve a continuación. Así de fácil es comprobar si una contraseña es válida usando ANSI C:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAXIMA_LONGITUD_CADENA 1000

int contieneAlMenosUnNumero(char cadena[MAXIMA_LONGITUD_CADENA])
{
    int indice = 0;
    while (cadena[indice] != '\0')
    {
        char actual = cadena[indice];
        if (isdigit(actual))
        {
            return 1;
        }
        indice++;
    }
    return 0;
}

int contieneAlMenosUnaLetra(char cadena[MAXIMA_LONGITUD_CADENA])
{
    int indice = 0;
    while (cadena[indice] != '\0')
    {
        char actual = cadena[indice];
        if (isalpha(actual))
        {
            return 1;
        }
        indice++;
    }
    return 0;
}
int esPalabraSecretaValida(char palabraSecreta[MAXIMA_LONGITUD_CADENA])
{
    if (strlen(palabraSecreta) < 8 || strlen(palabraSecreta) > 12)
    {
        return 0;
    }
    if (!contieneAlMenosUnaLetra(palabraSecreta) || !contieneAlMenosUnNumero(palabraSecreta))
    {
        return 0;
    }
    return 1;
}
int main()
{
    printf("%d\n", esPalabraSecretaValida("hola"));     // 0
    printf("%d\n", esPalabraSecretaValida("hola12"));   // 0
    printf("%d\n", esPalabraSecretaValida("hola1234")); // 1
    printf("%d\n", esPalabraSecretaValida("hunter2"));  // 0
    printf("%d\n", esPalabraSecretaValida("123"));      // 0
}

Nota: en este caso yo solo imprimo el resultado, pero tú puedes almacenarlo o hacer un if con el mismo.

Para terminar te dejo con más tutoriales de C en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *