Código cuenta clienteEl Código Cuenta Cliente (CCC) es un código utilizado en España por las entidades financieras (bancos, cajas y cooperativas de crédito) para la identificación de las cuentas de sus clientes. Consta de veinte dígitos. Estructura del CCCLos veinte dígitos del CCC están divididos en cuatro bloques distintos de acuerdo con la siguiente estructura: E O D N.[1]
Dígitos de controlLos dígitos situados en las posiciones novena y décima se generan a partir de los demás dígitos del CCC, permitiendo comprobar la validez del mismo y reducir la posibilidad de errores de manipulación. El primero de ellos valida conjuntamente los códigos de entidad y de oficina; el segundo, valida el número de cuenta. Para obtener cada uno de los dígitos de control se realiza el procedimiento siguiente:
Cálculo de los dígitos de controlExisten programas y códigos para calcular los dígitos de control del CCC.[3] En C++ BuilderAnsiString __fastcall TForm1::CalculaDigito(AnsiString Entidad, AnsiString Oficina, AnsiString Numero)
{
AnsiString Cadena;
int nResto;
int aPesos[10] = {6,3,7,9,10,5,8,4,2,1};
Cadena = "";
nResto = 0;
for (int nItem = 1; nItem <= (Entidad + Oficina).Length(); nItem ++)
nResto += StrToInt((Entidad + Oficina).SubString(nItem, 1)) * aPesos[8 - nItem];
nResto = 11 - (nResto % 11);
if (nResto == 11)
nResto = 0;
else if (nResto == 10)
nResto = 1;
Cadena = FormatFloat("0", nResto);
nResto = 0;
for (int nItem = 1; nItem <= Numero.Length(); nItem ++)
nResto += StrToInt(Numero.SubString(nItem, 1)) * aPesos[10 - nItem];
nResto = 11 - (nResto % 11);
if (nResto == 11)
nResto = 0;
else if (nResto == 10)
nResto = 1;
Cadena = Cadena + FormatFloat("0", nResto);
return (Cadena);
}
//---------------------------------------------------------------------------
En Perluse strict;
use warnings;
sub calcula_dc {
my ($entidad, $oficina, $cuenta) = @_;
my $calcula_digito = sub {
my @digitos = split //, shift;
my @factores = (1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
my $suma = 0;
foreach my $i (0..9) {
$suma += $digitos[$i] * $factores[$i];
}
my $digito = (11 - $suma % 11) < 10
? (11 - $suma % 11)
: 11 - (11 - $suma % 11);
return $digito;
};
return $calcula_digito->("00${entidad}${oficina}")
. $calcula_digito->($cuenta);
}
sub valida_dc {
my ($entidad, $oficina, $dc, $cuenta) = @_;
return $dc == calcula_dc($entidad, $oficina, $cuenta);
}
En PHPfunction valcuenta_bancaria($cuenta1,$cuenta2,$cuenta3,$cuenta4){
if (strlen($cuenta1)!=4) return false;
if (strlen($cuenta2)!=4) return false;
if (strlen($cuenta3)!=2) return false;
if (strlen($cuenta4)!=10) return false;
if (mod11_cuenta_bancaria("00".$cuenta1.$cuenta2)!=$cuenta3{0}) return false;
if (mod11_cuenta_bancaria($cuenta4)!=$cuenta3{1}) return false;
return true;
}
//////////////////////////////////////////////////////////////////////////////////////
function mod11_cuenta_bancaria($numero){
if (strlen($numero)!=10) return "?";
$cifras = Array(1,2,4,8,5,10,9,7,3,6);
$chequeo=0;
for ($i=0; $i < 10; $i++)
$chequeo += substr($numero,$i,1) * $cifras[$i];
$chequeo = 11 - ($chequeo % 11);
if ($chequeo == 11) $chequeo = 0;
if ($chequeo == 10) $chequeo = 1;
return $chequeo;
}
En Pythondef digitos_control(entidad, oficina, cuenta):
def proc(digitos):
resultado = 11 - sum(int(d) * 2**i for i,d in enumerate(digitos)) % 11
return resultado if resultado < 10 else 11 - resultado
return '%d%d' % (proc('00'+entidad+oficina), proc(cuenta))
donde las variables de entrada son strings de 4, 4 y 10 caracteres respectivamente, y se tiene en cuenta que De forma más explícita y con ciertas comprobaciones, la descripción del algoritmo correspondería a este programa: def digitos_control(entidad, oficina, cuenta):
def proc(digitos):
if not digitos.isdigit() or len(digitos) != 10:
raise ValueError('Debe ser número de 10 digitos: %s' % digitos)
factores = [1, 2, 4, 8, 5, 10, 9, 7, 3, 6]
resultado = 11 - sum(int(d)*f for d,f in zip(digitos, factores)) % 11
if resultado == 10: return 1
if resultado == 11: return 0
return resultado
return '%d%d' % (proc('00'+entidad+oficina), proc(cuenta))
En javaScript// método de la clase String que indica si la cadena se corresponde con un número de cuenta bancaria
// en formato dddd-dddd-dd-dddddddddd
String.prototype.isCC= function()
{
var controlDigit=function(number)
{
var intSum=0;
for (var intI=0;intI<10;intI++)
intSum+=(Math.pow(2,intI) * number[intI]);
intSum%= 11;
return (intSum<=1?intSum:(11-intSum));
};
if (/^([0-9]{4})\-([0-9]{4})\-([0-9]{2})\-([0-9]{10})$/.test(this))
return (controlDigit("00"+RegExp.$1+RegExp.$2)==RegExp.$3[0]
&& controlDigit(RegExp.$4)==RegExp.$3[1]);
return false;
};
// ejemplo de uso
alert("0049-1500-05-1234567892".isCC()) // true
alert("0049-1500-05-1234567890".isCC()) // false
IBANEl CCC está siendo sustituido por el IBAN, que es una codificación internacional que incluye el CCC.123 Véase tambiénNIF y CIF en Identificación tributaria, IVA, NASS. Referencias
|