Presentación del IBAN y la diferencia de uso de split y pattern según las versiones de Java

Enlazando con la entrada ayer, si queremos conocer más sobre el IBAN, como se calcula y qué significa cada grupo de dígitos debemos dirigirnos al portal de la SEPA en español. De la página que enlazo, os copio la parte final:

¿Qué es el IBAN?

El IBAN es el estándar creado por el Comité Europeo de Estándares Bancarios (ECBS) con el objetivo de facilitar la identificación homogénea de las cuentas bancarias a todos los países. El IBAN (estándar ISO 13616) consta de un máximo de 34 caracteres alfanuméricos, en función del país.

En España el IBAN se compone de 24 caracteres con la siguiente estructura:

  • Los dos primeros caracteres identifican al país de la cuenta. En el caso de España sería: ES.
  • Los dos caracteres siguientes corresponden a los dígitos de control, calculados según el algoritmo utilizado para validar el IBAN.
  • Los veinte caracteres restantes corresponden al Código de Cuenta Cliente que se viene utilizando y que identifican la Entidad financiera (4 dígitos), Oficina de la cuenta (4 dígitos), Dígitos de control (2 dígitos) y Número de cuenta (10 dígitos).

El IBAN se presenta en dos formatos diferentes:

  • Formato electrónico: La presentación del IBAN se realiza con todos los dígitos seguidos, sin espacios de separación.
  • Formato impreso: Es la misma que en formato electrónico, con las siguientes salvedades:
    • Las iniciales “IBAN” preceden al IBAN y van seguidas de un espacio.
    • El IBAN se divide en grupos de cuatro caracteres separados por un espacio.

Ejemplo:

CCC 9000 0001 21 0123456789
IBAN (electrónico) ES0690000001210123456789
IBAN (impreso) IBAN ES06 9000 0001 2101 2345 6789

Como podéis ver, la forma correcta de presentar el IBAN es mediante agrupaciones de 4 con la palabra IBAN delante o bien como un único «chorizo» de números y letras. El problema viene por el lado del usuario, acostumbrado a usar el CCC y cambiarle el estilo puede dificultar el uso de las aplicaciones, por lo que es más fácil usar el formato del CCC anteponiendo el primer grupo de 4 dígitos del IBAN (ES06 en el ejemplo).

Naturalmente, nosotros guardaremos el IBAN en un sólo campo de base de datos y para mostrarlo tendremos dos opciones, usar la función Split de las cadenas o bien usar un Patrón (tokenizer no lo contemplo ya que está desaconsejado su uso, deprecated).

Dependiendo de la versión de Java, la implementación del método Split (String.split) difiere. Si usamos las versión 6 de Java, la función Split usará la clase Pattern provocando una sobrecarga respecto a si usásemos directamente un patrón precompilado mediante la clase Pattern. Claro que para verdaderamente se note la penalización en el rendimiento habría que ejecutar muchas veces el método Split, por ejemplo en un bucle n veces.

Hasta aquí hemos hablado de la versión 6 de Java, pero ¿qué sucede en la versión 7? La implementación del método Split ha cambiado y se ha mejorado de tal forma que para patrones sencillos, es más rápido que usar Pattern. En el caso de patrones complejos sigue usando internamente la clase Pattern y se continúa prefieriendo el uso de un patrón precompilado.

Con esto llegamos a la conclusión de que debemos conocer las api que estemos usando aunque sean tan sencillas y comunes como en este caso. Debemos recordar que las librerías que usamos las programan personas y no tienen por qué ser las mas eficientes. Y por cierto, en Java 8 ¿cómo estará implementado el método Split? Os dejo que lo averigüéis.

Por si os sirve para el IBAN (sólo cuentas españolas), yo he usado (Java 6):

private static Pattern ibanDiv = Pattern.compile("([a-zA-Z]{2}\\d{2})(\\d{4})(\\d{4})(\\d{2})(\\d{10})");

Matcher m = ibanDiv.matcher(iban);
 if (m.matches()) {
    iban_c1= m.group(1);
    iban_entidad = m.group(2);
    iban_oficina = m.group(3);
    iban_dc = m.group(4);
    iban_cuenta = m.group(5);
 } else {
    log.error("Error al cargar IBAN");
 }

Deja un comentario