Como es bien sabido, el IBAN alemán consta del código de país (DE), un dígito de control de dos dígitos (según ISO 7064 ), el código bancario (8 dígitos) y el número de cuenta (incluido el número de subcuenta, 10 dígitos, los dígitos que faltan se rellenan con ceros a la izquierda) y, por lo tanto, son 22 dígitos. Para calcular el dígito de control, se forman el llamado BBAN (código bancario y número de cuenta), así como el código numérico de país \(1314\) para Alemania y el dígito de control \(00\) ).
Por ejemplo, el código de banco 21050170 y el número de cuenta 12345678 devuelven el BBAN 210501700012345678, ampliado con el código de país y el dígito de verificación 00, luego da como resultado \(x = 210501700012345678131400\) , donde el dígito de verificación ahora es: \(98 - (x \mod 97)\) . No es casualidad que esto se divida por \(97\) . Como el número primo de dos dígitos más grande posible, reconoce entradas incorrectas como dígitos transpuestos con la mayor probabilidad posible. Ahora mostramos las siguientes afirmaciones:
- Cambiar un dígito de un IBAN válido dará como resultado un IBAN no válido.
- Cambiar dos dígitos diferentes de un IBAN válido puede dar como resultado un IBAN válido.
- Si se intercambian dos posiciones diferentes de un IBAN válido, se crea un IBAN no válido.
- Si intercambia dos posiciones diferentes de un IBAN válido dos veces, puede resultar un IBAN válido.
Sea $$A = DE P_1 P_2 N_1 N_2 N_3 N_4 N_5 N_6 N_7 N_8 N_9 N_{10} N_{11} N_{12} N_{13} N_{14} N_{15} N_{16} N_{17} N_{18}$$ un IBAN válido.
Entonces $$A_B = N_1 N_2 N_3 N_4 N_5 N_6 N_7 N_8 N_9 N_{10} N_{11} N_{12} N_{13} N_{14} N_{15} N_{16} N_{17} N_{18} 131400$$ el BBAN asociado (ampliado con el código de país codificado con números DE y el dígito de verificación \(00\) ).
- Cambia ahora \(N_k\), es \(A_B^* = A_B + l \cdot 10^{24-k}\) con \(1 \leq k \leq 18\) y \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Con \( P = 98 - (A_B \mod 97) \) pero es \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Generalmente se aplica a \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Con \(A_B \equiv R_1 \mod 97\) y \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) es \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Pero ahora es \( 0 < R_2 < 97 \) y por lo tanto \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) y por lo tanto \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Esto deja sólo un cambio posible de un dígito de \( P \) para \( P^* \neq P \). Aquí pero \( N_k \) permanece sin cambios, se crea la suma de comprobación \( P \neq P^* \).
- Los siguientes dos IBAN son válidos:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Aquí es donde se aprovecha , que aumentamos dos dígitos adyacentes en \(A_1\) por \(97\) . Además, el IBAN no solo es formalmente válido, sino que los códigos bancarios subyacentes 20730001 y 20730098 realmente existen. - Intentamos primero, \( N_{k_1} \) y \( N_{k_2} \) para intercambiar. Primero es \( P = 98 - (A_B \mod 97) \) como \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) con \(l = N_{k_2} - N_{k_1}\) y \(1 \leq k_1, k_2 \leq 18\). Ahora es por
$$\begin{array} {|c|c|} \hline k & R = 10^{24-k} \mod 97 \\ \hline 1 & 56 \\ \hline 2 & 25 \\ \hline 3 & 51 \\ \hline 4 & 73 \\ \hline 5 & 17 \\ \hline 6 & 89 \\ \hline 7 & 38 \\ \hline 8 & 62 \\ \hline 9 & 45 \\ \hline 10 & 53 \\ \hline 11 & 15 \\ \hline 12 & 50 \\ \hline 13 & 5 \\ \hline 14 & 49 \\ \hline 15 & 34 \\ \hline 16 & 81 \\ \hline 17 & 76 \\ \hline 18 & 27 \\ \hline \end{array}$$
\( \forall k_1 \neq k_2 \in \left\{ 1, \ldots, 18 \right\} : R_{k_1} \neq R_{k_2}\). Asi es \( P \neq P^* \). Por lo que queda por comprobar que \(P_n\) y \(N_k\) con \( 1 \leq n \leq 2 \) y \( 1 \leq k \leq 18 \) vientos alisios. Tal vez \(P = 98 - (A_B \mod 97)), (R_1 = (A_B \mod 97)\), \(P^* = 98 - (A_B + (l \cdot 10^{24-k}) \mod 97)\), \(R_2 = (A_B + (l \cdot 10^{24-k}) \mod 97)\). Desde que nosotros \(A_B\) alrededor \(l \cdot 10^{24-k}\) tenemos que cambiar \(P_1\) o \(P_2\) alrededor \(-l\), asi que \(P\) alrededor \(-10^m l\) con \(m \in \{0,1\}\) cambio: Entonces es \(P^* = 98 - R_2\) pero también \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), como consecuencia \(R_2 = R_1 + 10^m l,\) y por lo tanto
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Sin embargo, esta ecuación nunca se cumple, como muestra el siguiente script:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
Esto deja sólo un posible intercambio de \(P_1\) y \(P_2\). Aquí pero \( N_k \) permanece sin cambios, se crea la suma de comprobación \( P \neq P^* \). - Los siguientes dos IBAN son válidos:
$$\begin{align*}A_1 = DE\boldsymbol{\color{red}8}\boldsymbol{\color{green}3}20220800\boldsymbol{\color{red}1}000000\boldsymbol{\color{green}0}00 \\ A_2 = DE\boldsymbol{\color{red}1}\boldsymbol{\color{green}0}20220800\boldsymbol{\color{red}8}000000\boldsymbol{\color{green}3}00\end{align*}$$ Aquí también existe el BIC 20220800.