SoloCodigo

Programación General => C/C++ => C++ Builder => Mensaje iniciado por: aguilot_21 en Jueves 31 de Marzo de 2005, 19:25

Título: Validar Dni
Publicado por: aguilot_21 en Jueves 31 de Marzo de 2005, 19:25
Buenas,

Alguien me puede decir como puede validar un DNI, que los 8 primeros sean enteros y el otro una letra??

Gracias
Título: Re: Validar Dni
Publicado por: © Jonathan © en Domingo 3 de Abril de 2005, 07:05
Podrias tomar los caracteres en un Edit, almacenarlos en un array de char y recorrerlos con un puntero... por medio de comparaciones podrias saber si los primeros 8 son numeros y el ultimo es un caracter. Saludos :hola:
Título: Re: Validar Dni
Publicado por: CiRRuS en Domingo 3 de Abril de 2005, 11:27
Además, recuerda que la letra va es única para cada combinación de números de 8 cifras. Mira a ver si en Internet encuentras el algoritmo que te dice cual es la letra a partir de la ristra de números.

Nos vemos :hola:
Título: Re: Validar Dni
Publicado por: Diodo en Domingo 3 de Abril de 2005, 12:14
Hola

Puedes hacer como te dice Jhonatan y meterlo en un *char y recorrerlo, para saber si es letra o numero puedes usar la libreria ctype.h que es ansic y supongo que tambien estara en c++builder estas son las funciones que proporciona:

http://c.conclase.net/librerias/libreria.php?lib=ctype (http://c.conclase.net/librerias/libreria.php?lib=ctype)

En tu caso puedes usar isdigit o isalpha para discriminar el caracter

Otra forma seria meter los DNI en strings y compararlos directamente

un saludo  :hola:
Título: Re: Validar Dni
Publicado por: aguilot_21 en Sábado 9 de Abril de 2005, 09:16
Tengo otro problema, recorro los caracteres uno a uno mirando si es numero o no pero con el ultimo siempre me da error. Este es el codigo, a ver si me podeis ayudar:

oid __fastcall TAltaImp::Button1Click(TObject *Sender)
{
        String Numeros,Lletra;
        char c;
        bool result;
        int i;
        Numeros=(DNI->Text).SubString(1,8);
        Lletra=(DNI->Text).SubString(8,9);
        result=true;
        i=1;

while ((Numeros!=Null()&&(i<=8) && (result==true)))
        {
        DNI->Text ="DNI incorrecte";
        c=Numeros;
        result=(c>=0)||(c<=9);
        i=i+1;
        }
        if (result==true)
        {
        DNI->Text ="DNI correcto";
        }
        else
        {
        DNI->Text ="DNI incorrecto";
        }

}

Gracias
Título: Re: Validar Dni
Publicado por: shackletta en Martes 12 de Abril de 2005, 18:42
Hola, creo que en lugar de empezar con i=1; deberías empezar con i=0; ya que en los arrays el primer indice siempre es el 0. Por eso en la última iteración del bucle, en lugar de estar accediendo al último entero del DNI estás accediendo a la letra, y por eso pone result = false.

Espero que sea eso.

Un saludo.