Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Validaciones. DNI/NIF, NIE, CIF.... (https://www.clubdelphi.com/foros/showthread.php?t=22175)

Niko 08-06-2005 16:53:20

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.

hermes_32 08-06-2005 17:32:23

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.

serhasae 20-06-2005 15:39:02

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.

serhasae 20-06-2005 15:43:06

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.

Niko 21-06-2005 17:22:41

Thank´s
 
Gracias por vuestras respuestas, me han sido de gran ayuda

Thank´s :)

Bye,

Leonard 19-09-2005 01:08:09

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..!!!! :(

usechin 04-07-2006 23:41:42

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


La franja horaria es GMT +2. Ahora son las 21:38:00.

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