Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #13  
Antiguo 05-02-2014
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Ubicación: Toledo - España
Posts: 1.418
Poder: 21
Angel.Matilla Va por buen camino
Vale. También tengo el código para hacer el cálculo a partir del CIF. Es este, en Builder:
Para el primer registro obligatorio del Cuaderno 19-14
Código:
String Registro;
Regsitro = "0119143001" + AjustaCadena("ES" + Modulo9710(cIdPre + "ES00") + cSufPre + cIdPre, ' ', 35, 'D') +
           AjustaCadena(cTitPre, ' ', 70, 'D') + Date().FormatString("yyyymmdd") + 
           AjustaCadena("PRE" + Now().FormatString("yyyymmddhhnnss00000") + cRefInt +
           Now().FormatString("yymm"), ' ', 35, 'D') +
           cCtaPre.SubString(5, 8) + AnsiString::StringOfChar(' ', 434));
Siempre suponiendo que el país es España; las variables son:
  • cIdPre es el CIF/NIF pedido (en este caso es el presentador).
  • cSufPre es el sufijo asigando apra ese CIF.
  • cTitPre es el nombre del titular de ese CIF.
  • cCtaPre es su cuenta bancaria en formato IBAN; en este caso, al ser la cabecera del presentador, se toman el código de entidad y oficina.
Las funciones que se llaman dentro de esa composición son estas:
Código:
AnsiString AjustaCadena(AnsiString cCadena, char cRelleno, int nLong, char cJust)
{
     cCadena = Trim(cCadena.SubString(1, nLong));
     switch (cJust)
     {
          case 'I':
               cCadena = AnsiString::StringOfChar(cRelleno, nLong - cCadena.Length()) + cCadena;
               break;
          case 'C':
               cCadena =  AnsiString::StringOfChar(cRelleno, (nLong - cCadena.Length())/2) + cCadena + AnsiString::StringOfChar(cRelleno, (nLong - cCadena.Length())/2);
               if (cCadena.Length() < nLong)
                    cCadena += AnsiString(cRelleno);
               break;
          case 'D':
               cCadena = cCadena + AnsiString::StringOfChar(cRelleno, nLong - cCadena.Length());
               break;
     }
     return (cCadena);
}
Esta primera función rellena a la longitud especificada (nLong) con el carácter indicado (cRelleno) justificando como indica cJust: Si cJust vale D añade caracteres al final; si es I los añade al principio y si es C centra la cadena. La otra función es esta:
Código:
AnsiString Modulo9710(AnsiString Cadena)
{
     AnsiString cValor;

     cValor = "";
     for (int nPos = 1; nPos <= Cadena.Length(); nPos ++)
     {
          if (isalpha(Cadena.c_str()[nPos - 1]))
               cValor = cValor + FormatFloat("00", Cadena.c_str()[nPos - 1] - 55);
          else
               cValor = cValor + Cadena.SubString(nPos, 1);
     }
     Cadena = cValor;

     cValor = FormatFloat("0", StrToInt(Cadena.SubString(1, 9)) % 97);
     Cadena = Cadena.SubString(10, Cadena.Length());
     while (!Cadena.IsEmpty())
     {
          if (StrToInt(cValor) < 10)
          {
               cValor = cValor + Cadena.SubString(1, 8);
               Cadena = Cadena.SubString(9, Cadena.Length());
          }
          else
          {
               cValor = cValor + Cadena.SubString(1, 7);
               Cadena = Cadena.SubString(8, Cadena.Length());
          }
          cValor = FormatFloat("0", StrToInt(cValor) % 97);
     }
     return cValor;
}
Que calcula los dígitos de control en base al módulo 97-10. Espero que sea esto lo que buscabas.

Última edición por Angel.Matilla fecha: 05-02-2014 a las 11:11:53.
Responder Con Cita
 



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
Cálculo de los dígitos IBAN Troffed Trucos 9 26-07-2020 18:08:27
validación Nelly Varios 8 12-10-2005 19:32:33
validacion halifax Tablas planas 7 06-02-2005 23:25:53
Validacion Carlex Conexión con bases de datos 1 08-09-2004 23:53:41
Como calcular codigo IBAN cinecito Varios 2 11-05-2004 18:49:44


La franja horaria es GMT +2. Ahora son las 04:03:59.


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