borrame.com - Colección particular de recortes de código y documentación para programación web

Canales RSS

Lo más fresco

  1. Reemplazar selección con JavaScript Nuevo
  2. ¿Esta IP pertenece a esta red? Modificado
  3. Mozilla Firefox Modificado

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Rotar logs en Windows
  4. Eliminar formato en Excel
  5. Caché del navegador
Compartir esta página

Dígito de control de una cuenta corriente

Este código en PHP permite calcular el dígito de control de un número de cuenta bancario español.

/**
 * Calcula el dígito de control de un número de cuenta CCC (código cuenta cliente)
 *
 * @todo No verifica la longitud de las cadenas
 */

function calcular_dc($entidad, $oficina, $cuenta){ // v2010-11-02
    $dc = "";
    $pesos = array(6, 3, 7, 9, 10, 5, 8, 4, 2, 1);

    // Primer dígito de control (entidad y oficina)
    $suma = 0;
    $cadena = $entidad . $oficina;
    for($i=0, $len=strlen($cadena); $i<$len; $i++){
        $suma += $pesos[$i] * substr($cadena, $len-$i-1, 1);
    }
    $digito = 11-$suma%11;
    if($digito==11){
        $digito = 0;
    }elseif($digito==10){
        $digito = 1;
    }
    $dc = $digito;

    // Segundo dígito de control (número de cuenta)
    $suma = 0;
    for($i=0, $len=strlen($cuenta); $i<$len; $i++){
        $suma += $pesos[$i] * substr($cuenta, $len-$i-1, 1);
    }
    $digito = 11-$suma%11;
    if($digito==11){
        $digito = 0;
    }elseif($digito==10){
        $digito = 1;
    }
    $dc .= $digito;

    return $dc;
}

(Confío en que no se trate de un secreto industrial; es imposible encontrar en Google ninguna referencia oficial sobre el formato).

Versión multi-byte

Si la aplicación utiliza UTF-8 u otro juego de caracteres multi-byte el algoritmo es el mismo pero necesitamos usar las funciones de manejo de caracteres apropiadas:

/**
 * Calcula el dígito de control de un número de cuenta CCC (código cuenta cliente)
 *
 * Los parámetros de entrada se manejan como cadenas multi-byte
 *
 * @todo No verifica la longitud de las cadenas
 */

function mb_calcular_dc($entidad, $oficina, $cuenta){ // v2010-08-31
    $dc = "";
    $pesos = array(6, 3, 7, 9, 10, 5, 8, 4, 2, 1);

    // Primer dígito de control (entidad y oficina)
    $suma = 0;
    $cadena = $entidad . $oficina;
    for($i=0, $len=mb_strlen($cadena); $i<$len; $i++){
        $suma += $pesos[$i] * mb_substr($cadena, $len-$i-1, 1);
    }
    $digito = 11-$suma%11;
    if($digito==11){
        $digito = 0;
    }elseif($digito==10){
        $digito = 1;
    }
    $dc = $digito;

    // Segundo dígito de control (número de cuenta)
    $suma = 0;
    for($i=0, $len=mb_strlen($cuenta); $i<$len; $i++){
        $suma += $pesos[$i] * mb_substr($cuenta, $len-$i-1, 1);
    }
    $digito = 11-$suma%11;
    if($digito==11){
        $digito = 0;
    }elseif($digito==10){
        $digito = 1;
    }
    $dc .= $digito;

    return $dc;
}

Esta página ha sido impresa el lunes 21 de mayo de 2012 (03:28:04 +0200) desde http://borrame.com/recortes/php/digito-control-ccc.html. La última vez que miré contenía HTML válido con CSS fresquito y si tiene flatas de ortografía ha sido sin querer.

borrame.com es el sitio anteriormente conocido como bits.demogracia.com (no confundir con Demogracia, que sólo pasaba por ahí).

© 2005-2011 by Álvaro G. Vicario (alvaro.es) • Burgos (España) • borrame.com