Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-05-2006
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.964
Poder: 29
delphi.com.ar Va camino a la fama
La entidad que lo regula/provee/creo... ¿No publica el algoritmo?
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #2  
Antiguo 08-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 21
Colgueit Va por buen camino
Ahí no aparece, y les he escrito y no me responden.
Pero bueno tiene que haber más codigos hechos para validar los NIF, aunque no paro de buscar y no encuentro nada.
Bueno pues a ver si lo encuentro , si no a ver si alguien sabe lo sabe y me lo dice .

Chauuu
Responder Con Cita
  #3  
Antiguo 08-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
La letra del NIF (supongo que estamos hablando de España) se calcula utilizando el resto de la division del numero entre 23. Con ese valor vamos a la siguiente lista de letras y usamos la que corresponda:

Código:
TRWAGMYFPDXBNJZSQVHLCKET
Por si no me explico muy bien, aqui te dejo un codigo de ejemplo:
Código Delphi [-]
function Letra(Numero: Integer): string;
begin
  Result:= copy('TRWAGMYFPDXBNJZSQVHLCKET',1 + (numero mod 23),1);
end;
Responder Con Cita
  #4  
Antiguo 08-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 21
Colgueit Va por buen camino
Ah bien gracias, ya solo lo que me falta sería comprobar que los ocho primeros digistos son numero y con el último hacer lo que dices. Pero no se bien manejar cadenas de caracteres.
Entonces ¿como haría la comprobación completa de que los 8 primeros digitos sean numeros y que el noveno sea un caracter que valida a esos ocho digitos?

Gracias otra vez
Responder Con Cita
  #5  
Antiguo 08-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Ya puestos vamos a hacer el trabajo completo

Código Delphi [-]
function Letra(Numero: Integer): string;
begin
  Result:= copy('TRWAGMYFPDXBNJZSQVHLCKET',1 + numero mod 23,1);
end;

function EsCorrecto(NIF: String): Boolean;
var
  Numero: Integer;
begin
  Result:= FALSE;
  // ¿Puede haber NIF de mas de 9 caracteres? de menos seguro que no
  if Length(NIF) >= 9 then
    if TryStrToInt(Copy(NIF,1,Length(NIF)-1),Numero) then
      Result:= Uppercase(Copy(NIF,Length(NIF),1)) = Letra(Numero);
end;


// Ejemplo de como usar la funcion
if EsCorrecto('12345678Z') then
    ShowMessage('Correcto')
  else
   ShowMessage('Incorrecto');
Responder Con Cita
  #6  
Antiguo 08-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 21
Colgueit Va por buen camino
Conseguido

Perfecto! Ya lo he probado y todo OK.
Muchas Gracias Seoane!
Responder Con Cita
  #7  
Antiguo 08-05-2006
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
Y pregunto yo ?

No puede haber cifras del DNI que sean menor de 10.000.000, y con ello la longitud ser menor de 9 ?

Yo creo recordar DNI's con cifras menores de esos Diez Millones (que me perdonen, pero supongo que de gente bastante mayor ...).

Por ello creo que deberías reconsiderar entonces la comprobación de la longitud. El método para calcular la letra sigue siendo perfectamente válido.

Si sirve como indicación adicional, dicho método también se puede aplicar a las Tarjetas de Residentes emitidas en España. En este caso, siempre empezaría por una 'X', seguido de 7 cifras y la letra final según el método descrito.

Saludos
__________________
Piensa siempre en positivo !
Responder Con Cita
  #8  
Antiguo 09-05-2006
Avatar de Colgueit
Colgueit Colgueit is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lanzarote, España
Posts: 91
Poder: 21
Colgueit Va por buen camino
Que yo sepa todos los Nif son de 8 numeros y la letra, estoy casi seguro vaya, eso si para Nif españoles.

En Nif extranjeros cambia la cosa y es un problema que me establa planteando ya que usando esta funcion para comprobar los Nif no puedo introducir un Nif que no sea español, que aunque no es muy común se puede dar el caso y el usuario no podría insertar en la base de datos a un cliente extranjero, con lo cual no se que hacer al respecto...

Chauu
Responder Con Cita
  #9  
Antiguo 09-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
La longitud fue mas una suposicion que una certeza, no había visto nunca ningun documento menor de 10.000.000, pero siempre se aprenden cosas nuevas. El caso es que probando con el programa PADRE, no me deja introducir un nif de menos de 9 letras ni de mas, no se si los de hacienda saben algo que yo ignoro pero sus razones tendran.

De todas formas no cuesta nada poner como requisito que se deben rellenar con ceros a la izquierda los numeros que no alcancen las nueve cifras. En algunos impresos oficiales ya te lo piden.

O simplemente podemos comprobar que la longitud esta entre 8 y 10
Código Delphi [-]
function LetraNIF(Numero: Integer): string;
begin
  Result:= copy('TRWAGMYFPDXBNJZSQVHLCKET',1 + numero mod 23,1);
end;

function EsNIFCorrecto(NIF: String): Boolean;
var
  Numero: Integer;
begin
  Result:= FALSE;
  // Eliminamos espacios y separadores
  while (pos(' ',NIF)>0) do
    delete(NIF,pos(' ',NIF),1);
  while (pos('-',NIF)>0) do
    delete(NIF,pos('-',NIF),1);
  while (pos('/',NIF)>0) do
    delete(NIF,pos('/',NIF),1);
  // La longitud entre 8 y 10 deberia de valer
  if Length(NIF) in [8..10] then
    if TryStrToInt(Copy(NIF,1,Length(NIF)-1),Numero) then
      Result:= Uppercase(Copy(NIF,Length(NIF),1)) = LetraNIF(Numero);
end;
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Validar Campo esimon OOP 6 09-05-2006 16:07:34
validar en fecha, dia y mes alcides Varios 2 08-02-2005 16:29:33
Validar XML con schema rsotolongo Internet 5 27-04-2004 10:33:15
validar sin exepciones gustavo2 Conexión con bases de datos 2 30-01-2004 15:54:56
validar en qry alcides SQL 2 06-01-2004 18:11:19


La franja horaria es GMT +2. Ahora son las 17:09:18.


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