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:
- La longitud de la contraseña debe medir entre 8 y 12 caracteres
- 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.