Aquí os propongo una posible solución. Puede ser mejorada, seguro.
function controliban(){
$("#banco_entidad_c").attr("onBlur","digc();");
$("#banco_oficina_c").attr("onBlur","digc();");
$("#banco_cuenta_c").attr("onBlur","digc();");
}
function digc(){
var d1 = primer_digito_control();
var d2 = segundo_digito_control();
var dc = d1 + d2;
document.getElementById('banco_dc_c').value = dc;
var ib = calcular_iban();
document.getElementById('banco_iban_c').value = ib;
}
function primer_digito_control(){
var entidad = document.getElementById('banco_entidad_c').value;
var oficina = document.getElementById('banco_oficina_c').value;
var modulo = 11;
var valorA = 0;
var valorB = 0;
var valorC = 0;
var digito1 = 0;
var e = 0;
for (e=0; e < entidad.length; e++){
digito1 = parseInt(entidad.charAt(e)) * (Math.pow(2, e+2) % modulo);
valorA = valorA + digito1;
}
for (e=0; e < oficina.length; e++) {
digito1 = parseInt(oficina.charAt(e)) * (Math.pow(2, e+6) % modulo);
valorB = valorB + digito1;
}
valorC = (valorA + valorB) % modulo;
digito1 = modulo - valorC;
switch(digito1){
case 10:
digito1 = 1;
break;
case 11:
digito1 = 0;
break;
}
return digito1.toString();
}
function segundo_digito_control(){
var cuenta = document.getElementById('banco_cuenta_c').value;
var modulo = 11;
var valorD = 0;
var digito2 = 0;
var c;
for (c=0; c<cuenta.length; c++){
digito2 = parseInt(cuenta.charAt(c)) * (Math.pow(2,c) % modulo);
valorD = valorD + digito2;
}
valorD = valorD % modulo;
digito2 = modulo - valorD;
switch(digito2){
case 10:
digito2 = 1;
break;
case 11:
digito2 = 0;
break;
}
return digito2.toString();
}
function calcular_iban(){
var entidad = document.getElementById('banco_entidad_c').value;
var valor = resto(entidad);
var oficina = document.getElementById('banco_oficina_c').value;
valor = resto(valor + oficina);
var dc = document.getElementById('banco_dc_c').value;
valor = resto(valor + dc);
var cuenta = document.getElementById('banco_cuenta_c').value;
valor = resto(valor + cuenta);
valor = resto(valor + '142800');
iban = 98 - parseInt(valor);
iban = "ES"+"0".repeat(2-iban.toString().length) + iban;
return iban;
}
function resto(valor){
var r = parseInt(valor);
r = r % 97;
return r.toString();
}