La germana IBAN konsistas el la landokodo (DE), ducifera kontrolcifero (laŭ ISO 7064 ), la bankkodo (8 ciferoj), kaj la kontonumero (inkluzive de subkontonumero, 10 ciferoj, mankantaj ciferoj kun komencaj nuloj), kio faras ĝin 22 signojn longa. Por kalkuli la kontrolciferon, oni unue formas sekvencon el la tiel nomata BBAN (bankkodo kaj kontonumero), la nombra landokodo \(1314\) por Germanio, kaj la kontrolcifero \(00\) .
Ekzemple, la banka kodo 21050170 kaj la kontonumero 12345678 donas la BBAN-kodon 210501700012345678. Etendante ĉi tion per la landokodo kaj la kontrolcifero 00, oni ricevas \(x = 210501700012345678131400\) , kie la kontrolcifero nun estas: \(98 - (x \mod 97)\) . La divido per \(97\) ne estas hazarda. Kiel la plej granda ebla ducifera primo, ĝi detektas erarojn kiel ekzemple transponitajn ciferojn kun la plej alta ebla probableco. Ni nun montros la jenajn observojn.:
- Ŝanĝi unu ciferon de valida IBAN rezultigos nevalidan IBAN.
- Ŝanĝi du malsamajn ciferojn de valida IBAN povas rezultigi validan IBAN.
- Se du malsamaj pozicioj de valida IBAN estas interŝanĝitaj, nevalida IBAN estas kreita.
- Se vi interŝanĝas du malsamajn poziciojn de valida IBAN dufoje, valida IBAN povas rezulti.
Estu $$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}$$ valida IBAN.
Tiam $$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$$ la rilata BBAN (plilongigita kun la numero-kodita landokodo DE kaj la kontrolcifero \(00\) ).
- Ŝanĝu nun \(N_k\), estas \(A_B^* = A_B + l \cdot 10^{24-k}\) kun \(1 \leq k \leq 18\) kaj \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Kun \( P = 98 - (A_B \mod 97) \) sed estas \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Ĝenerale validas por \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Kun \(A_B \equiv R_1 \mod 97\) kaj \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) estas \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Sed nun ĝi estas \( 0 < R_2 < 97 \) kaj tiel \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) kaj tial \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Ĉi tio lasas nur unu eblan ŝanĝon de cifero de \( P \) al \( P^* \neq P \). Ĉi tie sed \( N_k \) restas senŝanĝa, la ĉeksumo estas kreita \( P \neq P^* \).
- La jenaj du IBAN-oj validas:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Ĉi tie, ni utiligas la fakton, ke ni pliigis du apudajn ciferojn en \(A_1\) je \(97\) . Krome, la IBAN ne nur estas formale valida, sed la subestaj bankkodoj 20730001 kaj 20730098 efektive ekzistas. - Ni provas unue, \( N_{k_1} \) kaj \( N_{k_2} \) interŝanĝi. Unue estas \( P = 98 - (A_B \mod 97) \) kiel \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) kun \(l = N_{k_2} - N_{k_1}\) kaj \(1 \leq k_1, k_2 \leq 18\). Nun estas pro
$$\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}\). Tiel estas \( P \neq P^* \). Do restas kontroli ke \(P_n\) kaj \(N_k\) kun \( 1 \leq n \leq 2 \) kaj \( 1 \leq k \leq 18 \) komercoj. Eble \(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)\). Ekde ni \(A_B\) ĉirkaŭe \(l \cdot 10^{24-k}\) ni devas ŝanĝi \(P_1\) aŭ \(P_2\) ĉirkaŭe \(-l\), do \(P\) ĉirkaŭe \(-10^m l\) kun \(m \in \{0,1\}\) ŝanĝi: Tiam estas \(P^* = 98 - R_2\) sed ankaŭ \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), konsekvence \(R_2 = R_1 + 10^m l,\) kaj tiel
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Tamen, ĉi tiu ekvacio neniam estas plenumita, kiel montras la sekva skripto:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
Ĉi tio lasas nur eblan interŝanĝon de \(P_1\) kaj \(P_2\). Ĉi tie sed \( N_k \) restas senŝanĝa, la ĉeksumo estas kreita \( P \neq P^* \). - La sekvaj du IBAN-oj validas:
$$\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*}$$ Ankaŭ ĉi tie la BIC 20220800 efektive ekzistas.