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

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 24-09-2008
Avatar de apicito
apicito apicito is offline
Miembro
 
Registrado: may 2003
Ubicación: Ourense
Posts: 341
Poder: 24
apicito Va por buen camino
Bueno, creo que he encontrado el problema y es que la cita de Casimiro que pega una noticia de la seguridad social española tiene un error, no de casimiro sino de l seg.socail, cuando dice:
Dicho identificador siempre tiene 9 caracteres de longitud –una letra, siete dígitos numéricos y un carácter de control alfabético-
Ya que en el caso de los NIE la longitud es de 10 caracteres, así lo está exigiendo el I.N.Estadistica: 1 letra, ocho numeros y 1 letra.
Osea que la validación del NIE supone comprobar que empieza por XYZ y es este caso comprobar que con los restantes 9 dígitos valida correctamente como si fuera un DNI español.
Por ello deje las funciones anteriores así:

Código Delphi [-]
{----------------------------------------------------------EsCif---------------}
 { Validar si un CIF introducido es correcto}
function TDatos.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) or (Length(Cif) = 10) then
   begin
     {Comprobamos que sea un NIF}
     if (pos(Cif[1],'0123456789'))>0 then
       Result := EsNif(Cif)
     else
       begin
       {Se comprueba que la letra que designa el tipo de cif sea correcta}
         if (Pos(Cif[1], 'ABCDEFGHPQSKLMXYZJUVWR') = 0) then
           Result := False
         else
           {Se comprueba si es un extranjero,
            en ese caso se calcula el nif, cambiando la X, por 0}
           if (Pos(Cif[1], 'XYZ') = 1) then
             result := EsNif(Copy(Cif,2,9))
           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],'PSQ')<>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;
end;
{----------------------------------------------------------EsNif---------------}
function TDatos.EsNif(Cif:String): Boolean;
var a:string;
    Dni:String;
    Letra:String;
begin
  Dni:=copy(cif,1,8);
  a:=Copy('TRWAGMYFPDXBNJZSQVHLCKET',StrToInt( Dni ) mod 23 + 1, 1 );
  Letra:=Copy(cif,9,1);
  if a = letra then
     result:=True
  else
     result:=False;
end;
Espero no haberme equivicado esta vez.
Responder Con Cita
 


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
Sacar los números del 1 al 9 con dos digitos David OOP 4 06-03-2008 23:08:09
Descomponer un numero con 7 digitos Camilo Varios 3 05-11-2007 21:58:02
Ejercicio con Posiciones de dígitos gerupc Varios 19 18-08-2007 18:59:40
Ingresar un núm de 10 digitos... coronado Varios 1 12-10-2006 13:49:18
Cuantos digitos tomar Coco_jac SQL 1 11-04-2006 16:09:29


La franja horaria es GMT +2. Ahora son las 03:27:35.


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