You are on page 1of 5

La primera cifra del banco se multiplica por 4.

La segunda cifra del banco se multiplica por 8.


La tercera cifra del banco se multiplica por 5.
La cuarta cifra del banco se multiplica por 10.
La
La
La
La

primera cifra de la entidad se multiplica por 9.


segunda cifra de la entidad se multiplica por 7.
tercera cifra de la entidad se multiplica por 3.
cuarta cifra de la entidad se multiplica por 6.

Se suman todos los resultados obtenidos.


Se divide entre 11 y nos quedamos con el resto de la divisin.
A 11 le quitamos el resto anterior, y ese el el primer dgito de control, con la s
alvedad de que si nos da 10, el dgito es 1
Para obtener el segundo dgito de control:
La primera cifra de la cuenta se multiplica por 1
La segunda cifra de la cuenta se multiplica por 2
La tercera cifra de la cuenta se multiplica por 4
La cuarta cifra de la cuenta se multiplica por 8
La quinta cifra de la cuenta se multiplica por 5
La sexta cifra de la cuenta se multiplica por 10
La septima cifra de la cuenta se multiplica por 9
La octava cifra de la cuenta se multiplica por 7
La novena cifra de la cuenta se multiplica por 3
La decima cifra de la cuenta se multiplica por 6
Se suman todos los resultados obtenidos.
Se divide entre 11 y nos quedamos con el resto de la divisin.
A 11 le quitamos el resto anterior, y ese el el segundo dgito de control, con la
salvedad de que si nos da 10, el dgito es 1

Funcin para comprobar una CCC (Cuenta bancaria)


Manuel Maresca, Tecgroup
En esta ocasin os dejamos una funcin personalizada para comprobar que sean correct
os los dgitos de una cuenta bancaria espaola cuando los introducimos en una base d
e datos FileMaker.
/*
CheckCCC()
Desarrollado por Technology Group, s.l.
Chequea la correccin del CCC Bancario espaol.
Parmetros entrada
entidad
sucursal
dc

cc
*/
Case(
entidad="" or sucursal="" or dc="" or cc="";"";
Let(
[
codentidad=Right("000" & GetAsText(GetAsNumber(entidad));4);
codsucursal=Right("0000" & GetAsText(GetAsNumber(sucursal));4);
coddc=Right("00" & GetAsText(GetAsNumber(dc));2);
codcc=Right("0000000000" & GetAsText(GetAsNumber(cc));10);
error_entidad=Case(Length(entidad)<>4 or codentidad="0000";"Entidad incorrecta";
"");
error_sucursal=Case(Length(sucursal)<>4 or codsucursal="0000";"Sucursal incorrec
ta";"");
error_dc=Case(Length(dc)<>2 or coddc="00";"DC incorrecta";"");
error_cc=Case(Length(cc)<>10 or codcc="0000000000";"Cuenta incorrecta";"");
entsuc1=GetAsNumber(Middle(entidad;1;1));
entsuc2=GetAsNumber(Middle(entidad;2;1));
entsuc3=GetAsNumber(Middle(entidad;3;1));
entsuc4=GetAsNumber(Middle(entidad;4;1));
entsuc5=GetAsNumber(Middle(sucursal;1;1));
entsuc6=GetAsNumber(Middle(sucursal;2;1));
entsuc7=GetAsNumber(Middle(sucursal;3;1));
entsuc8=GetAsNumber(Middle(sucursal;4;1));
cc1=GetAsNumber(Middle(cc;1;1));
cc2=GetAsNumber(Middle(cc;2;1));
cc3=GetAsNumber(Middle(cc;3;1));
cc4=GetAsNumber(Middle(cc;4;1));
cc5=GetAsNumber(Middle(cc;5;1));
cc6=GetAsNumber(Middle(cc;6;1));
cc7=GetAsNumber(Middle(cc;7;1));
cc8=GetAsNumber(Middle(cc;8;1));
cc9=GetAsNumber(Middle(cc;9;1));
cc10=GetAsNumber(Middle(cc;10;1));
entsuc_dc = entsuc8 * 6 + entsuc7 * 3 + entsuc6 * 7 + entsuc5 * 9 + entsuc4 * 10
+ entsuc3 * 5 + entsuc2 * 8 + entsuc1 * 4;
cc_dc = cc10 * 6 + cc9 * 3 + cc8 * 7 + cc7 * 9 + cc6 * 10 + cc5 * 5 + cc4 * 8 +
cc3 * 4 + cc2 * 2 + cc1;
entsuc_dc=11-Mod (entsuc_dc ; 11 );
entsuc_dc=Case(entsuc_dc=10;1;entsuc_dc=11;0;entsuc_dc);
cc_dc= 11- Mod(cc_dc;11);
cc_dc=Case(cc_dc=10;1;cc_dc=11;0;cc_dc);
dc_calculado=GetAsText(entsuc_dc) & GetAsText(cc_dc);
error_dc_calculado=Case(dc_calculado<>dc;"CCC incorrecto";"Ok");
x="";

x=Encadena(x;error_entidad;"");
x=Encadena(x;error_sucursal;"");
x=Encadena(x;error_dc;"");
x=Encadena(x;error_cc;"");
x=Encadena(x;error_dc_calculado;"");
x=x
Utiliza la funcin Encadena (cadena1; cadena2; separador)
/*
Encadena()
Desarrollado por Technology Group, s.l.
Encadena dos cadenas alfanumricas por medio de un separador s y slo si ambas cadena
s son distintas de la cadena vaca.
Parmetros
Cadena1
Cadena2
Separador
Let(
[
x=cadena1 & Case(cadena1<>"" and cadena2<>"";separador;"") & cadena2
];
x
)

/* TablaCaracterSEPA.Loop(caracter) */
/* caracter es el carcter alfanumrico del que se quiere saber el cgido SEPA */
Case(
caracter="";GetAsText("");
Position("0123456789";Left(Upper(caracter);1);1;1)>0;GetAsText(Left(Upper(
caracter);1));
GetAsText(Position("ABCDEFGHIJKLMNOPQRSTUVWXYZ";Left(Upper(caracter);1);1;
1)+9)
)
/* TablaCaracterSEPA(valor) */
/* Convierte una cadena alfanumrica a una serie de cdigos numricos SEPA */
/* valor es una cadena alfanumrica */
Case(

valor="";"";
Let(
[
c1=Left(valor;1);
resto=Right(valor;Length(valor)-1);
x=TablaCaracterSEPA.Loop(c1) & TablaCaracterSEPA(resto)
];
x
)
)
/* CalculoIBANES */
/* Convierte a IBAN una cuenta en formato CCC con origen en ES (Espaa) */
/* ccc cuenta de 20 dgitos */
Let(
[
ccc_ok=Upper(Substitute(ccc;[" ";""];[".";""];["-";""]));
temp= ccc_ok & TablaCaracterSEPA ( "ES" ) & "00";
dc= 98 - Mod(GetAsNumber(temp);97);
x="ES" & Right("00" & GetAsText(dc);2) & ccc_ok;
x=x
];
x
)

You might also like