Despre robustețea IBAN-ului

După cum se știe, IBAN-ul german constă din codul de țară (DE), o cifră de verificare din două cifre (conform ISO 7064 ), codul bancar (cu 8 cifre) și numărul de cont (inclusiv numărul de subcont, 10 cifre, cifrele lipsă sunt completate cu zerouri inițiale) și, prin urmare, este de 22 de cifre. Pentru a calcula cifra de control, se formează așa-numitul BBAN (codul bancar și numărul de cont), precum și codul numeric de țară \(1314\) pentru Germania și cifra de control \(00\) ).


De exemplu, codul de bancă 21050170 și numărul de cont 12345678 returnează BBAN 210501700012345678, extins cu codul țării și cifra de verificare 00, apoi rezultă în \(x = 210501700012345678131400\) \(98 - (x \mod 97)\) acum 9: -0: \(98 - (x \mod 97)\) . Nu este o coincidență că aceasta este împărțită la \(97\) . Fiind cel mai mare număr prim posibil de două cifre, recunoaște intrările incorecte, cum ar fi cifrele transpuse, cu cea mai mare probabilitate posibilă. Arătăm acum următoarele afirmații:

  1. Schimbarea unei cifre a unui IBAN valid va avea ca rezultat un IBAN nevalid.
  2. Modificarea a două cifre diferite ale unui IBAN valid poate duce la un IBAN valid.
  3. Dacă două poziții diferite ale unui IBAN valid sunt schimbate, este creat un IBAN nevalid.
  4. Dacă schimbați de două ori două poziții diferite ale unui IBAN valid, poate rezulta un IBAN valid.

Fie $$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 valid.

Apoi $$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$$ BBAN asociat (extins cu codul de țară codificat numeric DE și cifra de verificare \(00\) ).

  1. Schimbați acum \(N_k\), este \(A_B^* = A_B + l \cdot 10^{24-k}\) cu \(1 \leq k \leq 18\) și \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Cu \( P = 98 - (A_B \mod 97) \) dar este \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Se aplică în general la \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Cu \(A_B \equiv R_1 \mod 97\) și \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) este \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Dar acum este \( 0 < R_2 < 97 \) și, astfel \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) prin urmare \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Aceasta rămâne o singură modificare posibilă a unei cifre de la \( P \) la \( P^* \neq P \). Aici dar \( N_k \) rămâne neschimbată, suma de control este creată \( P \neq P^* \).
  2. Următoarele două coduri IBAN sunt valabile:
    $$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Aici profitați , că am mărit două cifre adiacente în \(A_1\) cu \(97\) . În plus, IBAN-ul nu este doar valabil formal, dar codurile bancare subiacente 20730001 și 20730098 există de fapt.
  3. Încercăm mai întâi, \( N_{k_1} \) și \( N_{k_2} \) a schimba. Primul este \( P = 98 - (A_B \mod 97) \) la fel de \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) cu \(l = N_{k_2} - N_{k_1}\) și \(1 \leq k_1, k_2 \leq 18\). Acum este din cauza

    $$\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}\). Așa este \( P \neq P^* \). Deci ramane de verificat ca \(P_n\) și \(N_k\) cu \( 1 \leq n \leq 2 \) și \( 1 \leq k \leq 18 \) meserii. Poate \(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)\). De cand noi \(A_B\) în jurul \(l \cdot 10^{24-k}\) trebuie să ne schimbăm \(P_1\) sau \(P_2\) în jurul \(-l\), asa de \(P\) în jurul \(-10^m l\) cu \(m \in \{0,1\}\) schimbare: Atunci este \(P^* = 98 - R_2\) dar de asemenea \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), prin urmare \(R_2 = R_1 + 10^m l,\) și, astfel
    $$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Cu toate acestea, această ecuație nu este niciodată îndeplinită, așa cum arată următorul script:

    See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.

    Aceasta lasă doar un posibil schimb de \(P_1\) și \(P_2\). Aici dar \( N_k \) rămâne neschimbată, suma de control este creată \( P \neq P^* \).
  4. Următoarele două coduri IBAN sunt valabile:
    $$\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*}$$ Și aici, BIC 20220800 există de fapt.
Înapoi