Anar al contingut

Còdic conta client

De L'Enciclopèdia, la wikipedia en valencià

El Còdic Conta Client (CCC) és un còdic utilisat en Espanya per les entitats financeres (bancs, caixes i cooperatives de crèdit) per a l'identificació de les contes dels seus clients. Consta de vint dígits.

Estructura de el CCC

[editar | editar còdic]

Els vint dígits de el CCC estan dividits en quatre blocs distints d'acort en la següent estructura: I O D N.[1]

  • Els primers quatre dígits són el Còdic de l'Entitat, que coincidix en el Número de Registre d'Entitats del Banc d'Espanya (NRBE).[2]
  • Els següents quatre dígits identifiquen l'oficina.
  • Els següents dos dígits són els cridats dígits de control, que servixen per a validar el CCC.
  • Els últims dèu dígits identifiquen unívocamente el conte.

Dígits de control

[editar | editar còdic]

Els dígits situats en les posicions novena i dècima es generen a partir dels demés dígits de el CCC, permetent comprovar la validea del mateix i reduir la possibilitat d'errors de manipulació. El primer d'ells valida conjuntament els còdics d'entitat i d'oficina; el segon, valguda l'número.

Per a obtindre cada u dels dígits de control es realisa el procediment següent:

  • Per al primer dígit: lloc que el còdic conjunt d'Entitat i d'Oficina té tan sol huit sifres, es completa en dos zeros (00) per l'esquerra per a fer la comprovació.
  • Cada u dels dígits que componen el còdic es multiplica per un factor associat a la seua posició en el còdic. Els factors per a cada posició, d'esquerra a dreta, són: 1, 2, 4, 8, 5, 10, 9, 7, 3, 6. (Estos factors són 2n mod 11 per a 0n<10. Com 2 és una raïl primitiva mòdul 11, açò genera una seqüència de 10 números distints. Este producte es fa per a detectar trasposiciones de números, per eixemple 47 en lloc de 74.)
  • A continuació, se sumen els dèu productes obtinguts.
  • El resultat d'esta suma es dividix per 11 i s'anota el restant que produïx la divisió.
  • Este restant es resta d'11 per a obtindre el dígit de control corresponent a cada u dels còdics.
  • ya que estem interessats en obtindre solament una sifra, si la cantitat resultant anara 10, es prendrà en el seu lloc el dígit 1; i si anara 11, el 0.

Càlcul dels dígits de control

[editar | editar còdic]

Existixen programes i còdics per a calcular els dígits de control de el CCC.[3]

En C++ Builder

[editar | editar còdic]
AnsiString __fastcall TForm1::CalculaDigito(AnsiString Entitat, AnsiString Oficina, AnsiString Numere)
{
     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 <= (Entitat + Oficina).Length(); nItem ++)
          nResto += StrToInt((Entitat + 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 <= Numere.Length(); nItem ++)
          nResto += StrToInt(Numere.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);
}
//---------------------------------------------------------------------------
use strict;
use warnings;

sub calcula_dc {

my (&#36;entitat, &#36;oficina, &#36;conte) = _;

  my &#36;calcula_digito = sub {
    my digitos  = split //, shift;
    my factors = (1, 2, 4, 8, 5, 10, 9, 7, 3, 6);
    my &#36;suma = 0;
    foreach my &#36;i (0..9) {
      &#36;suma += &#36;digitos[&#36;i] * &#36;factors[&#36;i];
    }
    my &#36;digito = (11 - &#36;suma % 11) < 10
                  ? (11 - &#36;suma % 11)
                  : 11 - (11 - &#36;suma % 11);
    return &#36;digito;
  };

  return &#36;calcula_digito->("00&#36;{entitat}&#36;{oficina}")
       . &#36;calcula_digito->(&#36;conte);
}

sub valida_dc {
  my (&#36;entitat, &#36;oficina, &#36;dc, &#36;conte) = _;
  return &#36;dc == calcula_dc(&#36;entitat, &#36;oficina, &#36;conte);
}
function valcuenta_bancària(&#36;conta1,&#36;conta2,&#36;conta3,&#36;conta4){
if (strlen(&#36;conta1)!=4) return false;
if (strlen(&#36;conta2)!=4) return false;
if (strlen(&#36;conta3)!=2) return false;
if (strlen(&#36;conta4)!=10) return false;

if (mod11_conte_bancari("00".&#36;conta1.&#36;conta2)!=&#36;conta3{0}) return false;
if (mod11_conte_bancari(&#36;conta4)!=&#36;conta3{1}) return false;
return true;
}
//////////////////////////////////////////////////////////////////////////////////////

function mod11_conte_bancari(&#36;numere){
if (strlen(&#36;numere)!=10) return "?";

&#36;sifres = Array(1,2,4,8,5,10,9,7,3,6);
&#36;chequeo=0;
for (&#36;i=0; &#36;i < 10; &#36;i++)
    &#36;chequeo += substr(&#36;numere,&#36;i,1) * &#36;sifres[&#36;i];

&#36;chequeo = 11 - (&#36;chequeo % 11);
if (&#36;chequeo == 11) &#36;chequeo = 0;
if (&#36;chequeo == 10) &#36;chequeo = 1;
return &#36;chequeo;
}

Si entitat, oficina, i conte són strings en 4, 4, i 10 dígits respectivament (per eixemple, '0049', '1500', i '1234567892'), la següent funció calcula els dígits de control corresponents ('05' en l'eixemple, en lo que el conte seria 0049-1500-05-1234567892).

def digitos_control(entitat, oficina, conte):
    def proc(ds):  # procediment per al dígit de control dels dígits ds
        assert ds.isdigit() and len(ds) == 10, f'no són 10 dígits: {ds}'
        resultat = 11 - sum(int(d) * 2**i for i,d in enumerate(ds)) % 11
        return resultat if resultat < 10 else 11 - resultat
    return '%d%d' % (proc('00'+entitat+oficina), proc(conte))

En javaScript

[editar | editar còdic]
// método de la classe String que indica si la cadena es correspon en un número bancària 
// en format 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})&#36;/.test(this))
        return (controlDigit("00"+RegExp.&#36;1+RegExp.&#36;2)==RegExp.&#36;3[0] 
                    && controlDigit(RegExp.&#36;4)==RegExp.&#36;3[1]);
    return false;    
};

// eixemple d'us
   alert("0049-1500-05-1234567892".isCC())  // true
   alert("0049-1500-05-1234567890".isCC())  // false

El CCC està sent substituït pel IBAN, que és una codificació internacional que inclou el CCC.123

Vore també

[editar | editar còdic]

NIF i CIF en Identificació tributària, IVA, NASS.

Referències

[editar | editar còdic]


Referències

[editar | editar còdic]