PDA

Ver la Versión Completa : Verificación de dni


luna
29-05-2004, 20:27:08
Hola!!

Estoy intentando verificar un dni (introducido en un TDBEdit) con su letra, para ello tengo q dividir el número entre 23 y calcular el resto (con mod) , pero lo q no sé como hacer es coger sólo el número del TDBEdit (almacenar en una variable solo el número) xq se introduce todo seguido: número y letra.

Gracias por adelantado.

roman
29-05-2004, 20:35:14
Desconozco cuál es el formato del dni pero puedes usar la función Copy para extraer la porción que corresponda al número. Por ejemplo, si el formato fuese, por decir algo, "LLLNNNLL" (L - letra, N - número) usarías

Dni := Copy(Edit1.Text, 4, 3)

es decir, extraes 3 caracteres a partir del cuarto.

// Saludos

Tomás
29-05-2004, 21:15:16
Hola:

Código sacado de trucomanía:


function NIF(DNI: String): Char;
begin
Result := Copy('TRWAGMYFPDXBNJZSQVHLCKET',StrToInt(DNI) mod 23+1,1)[1];
end;


Como la letra del DNI es la última extraes con Copy desde la posición 1 el nº de caracteres de la cadena menos 1

eDNI := Trim(EditDNI.Text);
eNumerosDNI := Copy(eDNI,1,Length(eDNI)-1);

El problema aquí es que también el usuario te puede poner letras en la parte numérica, por lo que antes deberías recorrer caracter a caracter toda la cadena y verificar que excepto el último caracter los demás son números.

Suerte.

jachguate
29-05-2004, 21:30:31
En lugar de recorrer toda la cadena, yo dejaría algo como:

try
numero := IntToStr(copy(eDNI.Text, inicio, longitud));
except
on EConvertError do
ShowMessage('Ha introducido una letra donde solo deben ir números');
end;


Código mucho mas sencillo y fácil de leer...

Hasta luego.

;)

roman
29-05-2004, 21:33:46
Curioso:

La expresión StrToInt(DNI) mod 23+1 da siempre un número entre 1 y 23 y la cadena, si mis ojos cuentan bien, tiene 24 caracteres. ¿No se puede omitir la última T?

Por otra parte me parece que luna ya sabía todo esto, sólo preguntó como extraer la parte del número.

// Saludos