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

Canales RSS

Lo más fresco

  1. Bookmarklets Nuevo
  2. Recetario básico para CakePHP/2 Nuevo
  3. Certificado auto-firmado Nuevo

Sugerencias del chef

Lo más visitado

  1. Fecha y hora
  2. Dar formato a un número
  3. Reiniciar secuencia
  4. Vaciar un esquema
  5. Certificado auto-firmado
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) * * Nota: el DC calculado sólo es correcto si los parámetros son cadenas numéricas válidas * * @param string $entidad Cadena de 4 dígitos * @param string $oficina Cadena de 4 dígitos * @param string $cuenta Cadena de 10 dígitos * @return string Cadena de 2 dígitos (el primero para entidad/oficina, el segundo para cuenta) * * @version v2013-01-04 */ function calcular_dc($entidad, $oficina, $cuenta){     $dc = "";     $pesos = array(6, 3, 7, 9, 10, 5, 8, 4, 2, 1);     foreach(array($entidad . $oficina, $cuenta) as $cadena){         $suma = 0;         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;     }     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) * * Nota: el DC calculado sólo es correcto si los parámetros son cadenas numéricas válidas * * @param string $entidad Cadena de 4 dígitos * @param string $oficina Cadena de 4 dígitos * @param string $cuenta Cadena de 10 dígitos * @return string Cadena de 2 dígitos (el primero para entidad/oficina, el segundo para cuenta) * * @version v2013-01-04 */ function mb_calcular_dc($entidad, $oficina, $cuenta){     $dc = "";     $pesos = array(6, 3, 7, 9, 10, 5, 8, 4, 2, 1);     foreach(array($entidad . $oficina, $cuenta) as $cadena){         $suma = 0;         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;     }     return $dc; }

Historial

v2013-01-04
Eliminar código duplicado y documentar mejor.
v2010-11-02
Primera versión.

Esta página ha sido impresa el sábado 23 de septiembre de 2017 (02:23:35 +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-2017 by Álvaro González (alvaro.es) • Burgos (España) • borrame.com