Es habitual que los clientes te pidan que cuando desarrollemos software corporativo(O en aplicaciones de eCommerce) nos pidan que se calculen algunos campos como por ejemplo la letra del DNI. En los últimos años en las cuentas bancarias han aparecido dos campos nuevos el, IBAN y el BIC/SWIFT además del dígito de control que ya conocíamos.
En este post vamos a ver como se calculan:
El dígito de control
El dígito de control es ese número de dos cifras que va justo antes de la cuenta bancaria de diez cifras(Entes encontramos dos grupos de 4 cifras, uno es el banco y el otro es la sucursal). La función de este código es validar que la cuenta no tiene ningún numero erróneo, y se puede calcular con la siguiente función Javascript:
function calculaDC(entidad, oficina,cuenta) { var pesos = new Array(); pesos[0] = 6; pesos[1] = 3; pesos[2] = 7; pesos[3] = 9; pesos[4] = 10; pesos[5] = 5; pesos[6] = 8; pesos[7] = 4; pesos[8] = 2; pesos[9] = 1; entidadInv = inv(entidad); oficinaInv = inv(oficina); cuentaInv = inv(cuenta); ofient = "" + oficinaInv + entidadInv suma =0; for(a=0;a<8;a++) suma += ofient.substr(a,1)*pesos[a]; sumaCCC =0; for(a=0;a<10;a++) sumaCCC += cuentaInv.substr(a,1)*pesos[a]; dc = 11 - (suma % 11) dcCcc = 11 - (sumaCCC % 11) if (dc == 10) dc = 1; if (dc == 11) dc = 0; if (dcCcc == 10) dcCcc = 1; if (dcCcc == 11) dcCcc = 0; return ""+dc + dc_CCC; } function inv(item) { var ret = ""; for (a=0;a<=item.length;a++) ret = ret + item.substr(item.length-a,1); return ret }
El código IBAN: International Bank Account Number
El código IBAN es el número de cuenta con 4 dígitos delante para identificarla internacionalmente. Estos 4 dígitos son se componen del código de país(‘ES’ de España) mas dos digitos de control. Se puede calcular con el siguiente script:
function calculaIBANSpain(entidad,sucursal,cuenta) { var countryCode = "1428"; // Spain code var iban = entidad+sucursal; iban = "" + (iban % 97) + cuenta + cuenta.substring(0,2); iban = "" + (iban % 97) + cuenta.substring(2,cuenta.length) + countryCode + '00'; modIban = iban % 97; ccIban = 98 - modIban; if(ccIban<10) ccIban = "0" + ccIban; return "ES" + CC_iban; }
BIC: Bank Identifier Code
El código BIC(O SWIFT) sirve para identificar a la el banco al que se hace una transferencia. Puede tener 8 o 11 caracteres que son: 4 caracteres Entidad + 2 caracteres País + 2 caracteres Localidad + 3 caracteres Sucursal(O XXX).
Por desgracia no hay una manera de calcularlo, con la siguiente función lo obtenemos a partir del código de entidad:
var bic = []; bic[3]='BDEPESM1XXX'; bic[30]='ESPCESMMXXX'; bic[31]='ETCHES2GXXX'; bic[36]='SABNESMMXXX'; bic[46]='GALEES2GXXX'; bic[49]='BSCHESMMXXX'; bic[57]='BVADESMMXXX'; bic[58]='BNPAESMMXXX'; bic[59]='MADRESMMXXX'; bic[61]='BMARES2MXXX'; bic[65]='BARCESMMXXX'; bic[73]='OPENESMMXXX'; bic[75]='POPUESMMXXX'; bic[78]='BAPUES22XXX'; bic[81]='BSABESBBXXX'; bic[83]='RENBESMMXXX'; bic[86]='NORTESMMXXX'; bic[94]='BVALESMMXXX'; bic[122]='CITIES2XXXX'; bic[125]='BAOFESM1XXX'; bic[128]='BKBKESMMXXX'; bic[130]='CGDIESMMXXX'; bic[133]='MIKBESB1XXX'; bic[136]='AREBESMMXXX'; bic[138]='BKOAES22XXX'; bic[149]='BNPAESMSXXX'; bic[167]='GEBAESMMXXX'; bic[182]='BBVAESMMXXX'; bic[184]='BEDFESM1XXX'; bic[186]='BFIVESBBXXX'; bic[188]='ALCLESMMXXX'; bic[190]='BBPIESMMXXX'; bic[196]='WELAESMMXXX'; bic[198]='BCOEESMMXXX'; bic[200]='PRVBESB1XXX'; bic[211]='PROAESMMXXX'; bic[216]='POHIESMMXXX'; bic[219]='BMCEESMMXXX'; bic[220]='FIOFESM1XXX'; bic[224]='SCFBESMMXXX'; bic[227]='UNOEESM1XXX'; bic[229]='POPLESMMXXX'; bic[231]='DSBLESMMXXX'; bic[232]='INVLESMMXXX'; bic[233]='POPIESMMXXX'; bic[234]='CCOCESMMXXX'; bic[235]='PICHESMMXXX'; bic[236]='LOYIESMMXXX'; bic[237]='CSURES2CXXX'; bic[238]='PSTRESMMXXX'; bic[239]='EVOBESMMXXX'; bic[487]='GBMNESMMXXX'; bic[1459]='PRABESMMXXX'; bic[1460]='CRESESMMXXX'; bic[1465]='INGDESMMXXX'; bic[1474]='CITIESMXXXX'; bic[1475]='CCSEESM1XXX'; bic[1490]='SELFESMMXXX'; bic[1491]='TRIOESMMXXX'; bic[1524]='UBIBESMMXXX'; bic[1525]='BCDMESMMXXX'; bic[1534]='KBLXESMMXXX'; bic[1544]='BACAESMMXXX'; bic[2000]='CECAESMMXXX'; bic[2013]='CESCESBBXXX'; bic[2031]='CECAESMM031'; bic[2038]='CAHMESMMXXX'; bic[2043]='CECAESMM043'; bic[2045]='CECAESMM045'; bic[2048]='CECAESMM048'; bic[2051]='CECAESMM051'; bic[2056]='CECAESMM056'; bic[2066]='CECAESMM066'; bic[2080]='CAGLESMMXXX'; bic[2085]='CAZRES2ZXXX'; bic[2086]='CECAESMM086'; bic[2095]='BASKES2BXXX'; bic[2096]='CSPAES2LXXX'; bic[2099]='CECAESMM099'; bic[2100]='CAIXESBBXXX'; bic[2103]='UCJAES2MXXX'; bic[2104]='CSSOES2SXXX'; bic[2105]='CECAESMM105'; bic[3001]='BCOEESMM001'; bic[3005]='BCOEESMM005'; bic[3007]='BCOEESMM007'; bic[3008]='BCOEESMM008'; bic[3009]='BCOEESMM009'; bic[3016]='BCOEESMM016'; bic[3017]='BCOEESMM017'; bic[3018]='BCOEESMM018'; bic[3020]='BCOEESMM020'; bic[3023]='BCOEESMM023'; bic[3025]='CDENESBBXXX'; bic[3029]='CCRIES2A029'; bic[3035]='CLPEES2MXXX'; bic[3045]='CCRIES2A045'; bic[3058]='CCRIES2AXXX'; bic[3059]='BCOEESMM059'; bic[3060]='BCOEESMM060'; bic[3063]='BCOEESMM063'; bic[3067]='BCOEESMM067'; bic[3070]='BCOEESMM070'; bic[3076]='BCOEESMM076'; bic[3080]='BCOEESMM080'; bic[3081]='BCOEESMM081'; bic[3084]='CVRVES2BXXX'; bic[3085]='BCOEESMM085'; bic[3089]='BCOEESMM089'; bic[3095]='CCRIES2A095'; bic[3096]='BCOEESMM096'; bic[3098]='BCOEESMM098'; bic[3102]='BCOEESMM102'; bic[3104]='BCOEESMM104'; bic[3105]='CCRIES2A105'; bic[3110]='BCOEESMM110'; bic[3111]='BCOEESMM111'; bic[3112]='CCRIES2A112'; bic[3113]='BCOEESMM113'; bic[3115]='BCOEESMM115'; bic[3116]='BCOEESMM116'; bic[3117]='BCOEESMM117'; bic[3118]='CCRIES2A118'; bic[3119]='CCRIES2A119'; bic[3121]='CCRIES2A121'; bic[3123]='CCRIES2A123'; bic[3127]='BCOEESMM127'; bic[3130]='BCOEESMM130'; bic[3134]='BCOEESMM134'; bic[3135]='CCRIES2A135'; bic[3138]='BCOEESMM138'; bic[3140]='BCOEESMM140'; bic[3144]='BCOEESMM144'; bic[3146]='CCCVESM1XXX'; bic[3150]='BCOEESMM150'; bic[3152]='CCRIES2A152'; bic[3157]='CCRIES2A157'; bic[3159]='BCOEESMM159'; bic[3160]='CCRIES2A160'; bic[3162]='BCOEESMM162'; bic[3165]='CCRIES2A165'; bic[3166]='BCOEESMM166'; bic[3174]='BCOEESMM174'; bic[3179]='CCRIES2A179'; bic[3183]='CASDESBBXXX'; bic[3186]='CCRIES2A186'; bic[3187]='BCOEESMM187'; bic[3190]='BCOEESMM190'; bic[3191]='BCOEESMM191'; bic[9000]='ESPBESMMXXX'; function calculoBic(entidad) { return bic[ entidad*1 ]; }
Muy bueno el artículo , pero al calcular el IBAN siempre me da un número incorrecto , dá igual con que CCC lo pruebe.