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.

Si el post ha sido de tu agrado te invito a que me sigas para saber cuando haya escrito un nuevo post, haya actualizado algún sistema o publicado un nuevo software. Facebook | X | Instagram | Telegram | También estoy a tus órdenes para cualquier contratación en mi página de contacto