![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
Hola Angel.
Gracias por el aporte .Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
|
#2
|
||||
|
||||
|
Gracias por el aporte y la documentación.
__________________
http://www.gestionportable.com |
|
#3
|
||||
|
||||
|
Ampliando el código anterior que puse, para validar cualquier IBAN que se introduzca o calcular el correspondiente a un número de cuenta. Este es el código:
Código:
AnsiString CalIban(AnsiString Cuenta, AnsiString Pais)
{
AnsiString cAux;
if (Cuenta.Trim().IsEmpty() || Cuenta.Length() > 34)
return "";
Cuenta = UpperCase(Cuenta);
cAux = "";
for (int nPos = 0; nPos < Cuenta.Length(); nPos ++)
if (isalpha(Cuenta.c_str()[nPos]) || isdigit(Cuenta.c_str()[nPos]))
cAux = cAux + AnsiString(Cuenta.c_str()[nPos]);
Cuenta = cAux;
if (isalpha(Cuenta.c_str()[0]) && isalpha(Cuenta.c_str()[1])) // Es IBAN
{
if (isalpha(Cuenta.c_str()[2]) || isalpha(Cuenta.c_str()[3]))
return "";
Cuenta = Cuenta.SubString(5, Cuenta.Length()) + Cuenta.SubString(1, 2) + "00";
Pais = Cuenta.SubString(1, 2);
}
else
{
if (Pais.IsEmpty())
Pais = "ES";
Cuenta = Cuenta + Pais + "00";
}
cAux = "";
for (int nPos = 1; nPos <= Cuenta.Length(); nPos ++)
{
if (isalpha(Cuenta.c_str()[nPos - 1]))
cAux = cAux + FormatFloat("00", Cuenta.c_str()[nPos - 1] - 55);
else
cAux = cAux + Cuenta.SubString(nPos, 1);
}
Cuenta = cAux;
cAux = FormatFloat("0", StrToInt(Cuenta.SubString(1, 9)) % 97);
Cuenta = Cuenta.SubString(10, Cuenta.Length());
while (!Cuenta.IsEmpty())
{
if (StrToInt(cAux) < 10)
{
cAux = cAux + Cuenta.SubString(1, 8);
Cuenta = Cuenta.SubString(9, Cuenta.Length());
}
else
{
cAux = cAux + Cuenta.SubString(1, 7);
Cuenta = Cuenta.SubString(8, Cuenta.Length());
}
cAux = FormatFloat("0", StrToInt(cAux) % 97);
}
return Pais + FormatFloat("00", 98 - StrToInt(cAux));
}
|
|
#4
|
||||
|
||||
|
Muchas gracias por el aporte.
Para los que usamos Delphi en vez de C++ Builder, les dejo la "traducción" de la función a Pascal.
__________________
Progress Openedge https://abevoelker.com/progress_open...dered_harmful/ Delphi forever... |
|
#5
|
|||
|
|||
|
Gracias por los aportes.
Si se le pasa un IBAN para comprobar sus dígitos de control la función fallaría (incluso la de C++), hay que revisar el paso 2 cuando ya es un IBAN. Aquí les propongo mis modificaciones:
|
|
#6
|
|||
|
|||
|
Muchas gracias por el aporte, me viene de perlas.
Saludos |
|
#7
|
|||
|
|||
|
Gracias por la aportación.
Solo una cosilla, el codigo del pais en el caso de ser una cuenta IBAN debe tomarse antes de la modificacion de la cuenta ![]() [quote=Angel.Matilla;469275]Ampliando el código anterior que puse, para validar cualquier IBAN que se introduzca o calcular el correspondiente a un número de cuenta. Este es el código: Código:
Cuenta = cAux;
if (isalpha(Cuenta.c_str()[0]) && isalpha(Cuenta.c_str()[1])) // Es IBAN
{
if (isalpha(Cuenta.c_str()[2]) || isalpha(Cuenta.c_str()[3]))
return "";
Pais = Cuenta.SubString(1, 2);
Cuenta = Cuenta.SubString(5, Cuenta.Length()) + Cuenta.SubString(1, 2) + "00";
}
else
{
if (Pais.IsEmpty())
Pais = "ES";
Cuenta = Cuenta + Pais + "00";
}
|
|
#8
|
||||
|
||||
|
Tienes razón en tu puntualización. No osbtante, y es culpa mía, el código de país es uno de los parámetros que se pasan a la función.
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|