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 08-06-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
Validaciones. DNI/NIF, NIE, CIF....

Hola a Todos:

Les Explico, estoy haciendo un programita para hacer validaciones de documentos, como: NIF, NIE, CIF etc.

Ahora bien, he logrado averiguar:

- Como validar un C.I.F
- Como validar un número de la Seguridad Social
- Como calcular el Digito de Control de una Cuenta Bancaria
- Como validar una Tarjeta de Crédito

Y me faltan:

- Saber la letra del D.N.I/N.I.F segun el número.
- Saber la letra del N.I.E segun el número.
- Saber el IBAN de la cuenta Bancaria.

Si pueden ayudarme se lo agradeceré mucho.

Gracias de Antemano
Jorge.
Responder Con Cita
  #2  
Antiguo 08-06-2005
Avatar de hermes_32
hermes_32 hermes_32 is offline
Miembro
 
Registrado: jul 2003
Posts: 94
Poder: 21
hermes_32 Va por buen camino
Hola Niko,

Letra del DNI:

Código Delphi [-]
  function LetraNIF(DNI: String): Char; 
  begin
    Result := Copy('TRWAGMYFPDXBNJZSQVHLCKET',StrToInt(DNI) mod 23+1,1)[1];
  end;

IBAN de una cuenta bancaria:

Código Delphi [-]
function ChangeAlpha(input: string): string;
  // A -> 10, B -> 11, C -> 12 ...
var 
  a: Char;
begin
  Result := input;
  for a := 'A' to 'Z' do
  begin
    Result := StringReplace(Result, a, IntToStr(Ord(a) - 55), [rfReplaceAll]);
  end;
end;

function CalculateDigits(iban: string): Integer;
var 
  v, l: Integer;
  alpha: string;
  number: Longint;
  rest: Integer;
begin
  iban := UpperCase(iban);
  if Pos('IBAN', iban) > 0 then
    Delete(iban, Pos('IBAN', iban), 4);
  iban := iban + Copy(iban, 1, 4);
  Delete(iban, 1, 4);
  iban := ChangeAlpha(iban);
  v := 1;
  l := 9;
  rest := 0;
  alpha := '';
  try
    while v <= Length(iban) do
    begin
      if l > Length(iban) then
        l := Length(iban);
      alpha := alpha + Copy(iban, v, l);
      number := StrToInt(alpha);
      rest := number mod 97;
      v := v + l;
      alpha := IntToStr(rest);
      l := 9 - Length(alpha);
    end;
  except
    rest := 0;
  end;
  Result := rest;
end;

No he probado ninguno de ellos. Pero espero que funcionen.
__________________
Hay gente que esta demasiado educada para hablar con la boca llena pero no les importa hacerlo con la cabeza hueca.
Responder Con Cita
  #3  
Antiguo 20-06-2005
serhasae serhasae is offline
Miembro
 
Registrado: jun 2004
Ubicación: España
Posts: 117
Poder: 20
serhasae Va por buen camino
Validacion CIF

{Cambiar un carácter por otro en una cadena.}
function CadCambioCar(Cadena, CarOrig, CarCambio : String) : String;
var
i : Integer;
Temp : String;
begin
Temp := '';
for i := 1 to Length(Cadena) do
if Copy(Cadena, i, 1) = CarOrig then
Temp := Temp + CarCambio
else
Temp := Temp + Copy(Cadena, i, 1);
Result := Temp;
end;


{ Validar si un CIF introducido es correcto}
function EsCif(Cif : String) : Boolean;
var
Suma, Control : Integer;
n : Byte;
begin
Result := False;

{Se pasa todo a mayúsculas limpio de espacios y de caracteres especiales}
Cif := UpperCase(Trim(Cif));

{Se limpia de los caracteres '-' y '/'. }
Cif := CadCambioCar(Cif,'-','');
Cif := CadCambioCar(Cif,'/','');

{El cif debe ser de 9 cifras}
if Length(Cif) = 9 then
begin
{Comprobamos que sea un NIF}
if EsNumero(Cif[1]) then
Result := EsNif(Cif)
else
{Se comprueba que la letra que designa el tipo de cif sea correcta}
if (Pos(Cif[1], 'ABCDEFGHPQSKLMX') = 0) then
Result := False
else
{Se comprueba si es un extranjero,
en ese caso se calcula el nif, cambiando la X, por 0}

if Cif[1] = 'X' then
Result := EsNif('0'+Copy(Cif,2,8))
else
begin
Suma:= StrToInt(Cif[3])+StrToInt(Cif[5])+StrToInt(Cif[7]);
for n := 1 to 4 do
Suma := Suma + ((2*StrToInt(Cif[2*n])) mod 10)+((2*StrToInt(Cif[2*n])) div 10);
Control := 10 - (Suma mod 10);
{Se comprueba si es de tipo 'P' o 'S', es decir,
Corporaciones Locales (Ayuntamientos, etc.)
y Organismos públicos.}

if Pos(Cif[1],'PS')<>0 then
{Control tipo letra}
Result := (Cif[9] = Chr(64+Control))
else
{Resto de tipos de CIF}
begin
{Control tipo número}
if Control = 10 then
Control := 0;
Result:= ( StrToInt(Cif[9]) = Control);
end;
end;
end;
end;

No la he probado pruebalo y me cuentas, Suerte.
Responder Con Cita
  #4  
Antiguo 20-06-2005
serhasae serhasae is offline
Miembro
 
Registrado: jun 2004
Ubicación: España
Posts: 117
Poder: 20
serhasae Va por buen camino
Validacion NSS

function ValidaDCSS(Numero:string):boolean;
var
Limpio : string;
i,dos : integer;
uno : real;
begin
{El numero de la seguridad social debe entrarse con este
formato:
28/1234567/40
o bien:
28/12345678/40
En función de que se trate del numero de una empresa
o del numero de un trabajador.
}

Limpio:='';
for i:=1 to Length(Numero) do
if Numero[i] in ['0'..'9'] then Limpio:=Limpio+Numero[i];

{Si no tiene 11 ó 12 digitos, no es válido}
if (Length(Limpio)=11) or (Length(Limpio)=12) then
begin
Uno:=StrToFloat( copy(Limpio,1,Length(Limpio)-2) );
Dos:=StrToInt( copy(Limpio,Length(Limpio)-1,2) );
Result:=Trunc( ( (Uno/97)-Trunc(Uno/97) )*97 )=Dos;
end
else Result:=FALSE;
end;

begin
if ValidaDCSS('46/12345678/43')
then ShowMessage('Válido')
else ShowMessage('No Válido');
end;
Lo mismo de antes, prueba, erra y aprende. Mira a ver si te sirve. Suerte.
Responder Con Cita
  #5  
Antiguo 21-06-2005
Niko Niko is offline
No confirmado
 
Registrado: may 2003
Ubicación: Fuenlabrada - Madrid
Posts: 55
Poder: 0
Niko Va por buen camino
Thank´s

Gracias por vuestras respuestas, me han sido de gran ayuda

Thank´s

Bye,
Responder Con Cita
  #6  
Antiguo 19-09-2005
Leonard Leonard is offline
Registrado
 
Registrado: may 2004
Posts: 8
Poder: 0
Leonard Va por buen camino
Unhappy Validacion de CI, Rif, ONG

Hola Amigos, les escribo desde venezuela he revisado en foro y he hallado varias Validaciones. DNI/NIF, NIE, CIF...., he notado que esas validaciones se calculan; en mi caso tengo un campo que se llama "cod_cliente" este debe ser validado para aceptar NUMERO DE IDENTIFICACION Unicos en toda Venezuela y son Asignados al Registrar la Empresa, Usuario u organizacion.


Este campo "Cod_Cliente" debe aceptar 3 tipos de Formatos, acontinuacion se los muestro las X indica cuantos nros debe tener el formato:

1.- Si es Empresa: R.I.F. (Registro de Informacion Fiscal). Siempre tendra el Siguiente Formato :

J-XXXXXXXX-X
V-XXXXXXXX-X


2.- Si es una Organizacion del Gobierno: O.N.G. (Organizacion No Gubernamental). Siempre tendra el Siguiente Formato:


G-XXXXXXXX-X

3.- Si es un Usuario Cualquiera: C.I. (Cedula de Identidad). Este numero es Unico e identifica a cualquier Persona en Toda venezuela, Puede tener 3 Poseer Formatos :

V-XXXXXXXX
V-XXXXXXX
E-XXXXXXXX


He buscado en el foro y TMania Explorer, sin embargo no encuentro nada, Porfavor les Agradeceria me puedan ayudar con una funcion de validacion..!!!!
Responder Con Cita
  #7  
Antiguo 04-07-2006
usechin usechin is offline
Registrado
 
Registrado: jul 2006
Posts: 1
Poder: 0
usechin Va por buen camino
Question Validación del número de r.i.f.

Buenas tardes.

También estoy interesado en conocer como se genera el digito validador del r.i.f., si ya lo averiguastes mucho te agradecería compartieras esa información.

Gracias de antemano.

Jorge Useche
0416-461.69.97
venezuela
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 15:25:42.


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