Pri la fortikeco de la IBAN

Kiel konate, la germana IBAN konsistas el la landokodo (DE), ducifera kontrolcifero (laŭ ISO 7064 ), la bankkodo (8-cifera) kaj la kontnumero (inkluzive de subkonta numero, 10-ciferoj, mankantaj ciferoj estas plenigitaj per antaŭaj nuloj) kaj do estas 22 -ciferoj. Por kalkuli la ĉekciferon, estas formita la tiel nomata BBAN (bankkodo kaj kontnumero) same kiel la nombra landokodo \(1314\) por Germanio kaj la ĉekcifero \(00\) ).


Ekzemple, la bankkodo 21050170 kaj la kontnumero 12345678 resendas la BBAN 210501700012345678, vastigitan kun la landokodo kaj la ĉekcifero 00 tiam rezultigas \(x = 210501700012345678131400\) \(98 - (x \mod 97)\) estas 8: -0: \(98 - (x \mod 97)\) . Ne estas hazardo, ke ĉi tio estas dividita per \(97\) . Kiel la plej granda ebla ducifera primo, ĝi rekonas malĝustajn enskribojn kiel ekzemple transmetitaj ciferoj kun la plej granda ebla probableco. Ni nun montras la sekvajn deklarojn:

  1. Ŝanĝi unu ciferon de valida IBAN rezultigos nevalidan IBAN.
  2. Ŝanĝi du malsamajn ciferojn de valida IBAN povas rezultigi validan IBAN.
  3. Se du malsamaj pozicioj de valida IBAN estas interŝanĝitaj, nevalida IBAN estas kreita.
  4. 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\) ).

  1. Ŝ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^* \).
  2. La sekvaj du IBAN-oj validas:
    $$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ , ke ni pliigis du apudajn ciferojn en \(A_1\) per \(97\) . Krome, la IBAN ne nur formale validas, sed la subestaj bankkodoj 20730001 kaj 20730098 fakte ekzistas.
  3. 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\)\(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^* \).
  4. 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.
Reen