Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-05-2004
luna luna is offline
Miembro
 
Registrado: may 2004
Posts: 17
Poder: 0
luna Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 29-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 29-05-2004
Tomás Tomás is offline
Miembro
 
Registrado: may 2003
Ubicación: Elche
Posts: 140
Poder: 21
Tomás Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 29-05-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate

Última edición por jachguate fecha: 29-05-2004 a las 21:33:06. Razón: agregar etiquetas...
Responder Con Cita
  #5  
Antiguo 29-05-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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

Última edición por roman fecha: 29-05-2004 a las 21:36:38.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 02:31:56.


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
Copyright 1996-2007 Club Delphi