Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Verificación de dni (https://www.clubdelphi.com/foros/showthread.php?t=10814)

luna 29-05-2004 20:27:08

Verificación de dni
 
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:

Código:

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:
Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 13:49:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi