Calculo DC de una cuenta bancaria y cálculo IBAN

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();
}