Rreth qëndrueshmërisë së IBAN-it

Siç dihet, IBAN-i gjerman përbëhet nga kodi i shtetit (DE), një shifër kontrolli dyshifrore (sipas ISO 7064 ), kodi bankar (8-shifror) dhe numri i llogarisë (përfshirë numrin e nënllogarisë, Shifrat 10-shifrore, që mungojnë, plotësohen me zero kryesore) dhe për këtë arsye janë 22-shifrore. Për të llogaritur shifrën e kontrollit, formohet i ashtuquajturi BBAN (kodi bankar dhe numri i llogarisë) si dhe kodi numerik i vendit \(1314\) për Gjermaninë dhe shifra e kontrollit \(00\) ).


Për shembull, kodi bankar 21050170 dhe numri i llogarisë 12345678 kthejnë BBAN 210501700012345678, të zgjeruar me kodin e shtetit dhe shifrën e kontrollit 00, më pas rezulton në \(x = 210501700012345678131400\) , ku është 8 (8 \(98 - (x \mod 97)\) 8) \(98 - (x \mod 97)\) . Nuk është rastësi që kjo pjesëtohet me \(97\) . Si numri kryesor dyshifror më i madh i mundshëm, ai njeh hyrjet e pasakta si shifrat e transpozuara me probabilitetin më të madh të mundshëm. Tani tregojmë deklaratat e mëposhtme:

  1. Ndryshimi i një shifre të një IBAN të vlefshëm do të rezultojë në një IBAN të pavlefshëm.
  2. Ndryshimi i dy shifrave të ndryshme të një IBAN të vlefshëm mund të rezultojë në një IBAN të vlefshëm.
  3. Nëse dy pozicione të ndryshme të një IBAN të vlefshëm ndërrohen, krijohet një IBAN i pavlefshëm.
  4. Nëse ndërroni dy pozicione të ndryshme të një IBAN të vlefshëm dy herë, mund të rezultojë një IBAN i vlefshëm.

Le $$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}$$ një IBAN i vlefshëm.

Pastaj $$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-in e lidhur (shtrirë me kodin e shtetit të koduar me numër DE dhe shifrën e kontrollit \(00\) ).

  1. Ndrysho tani \(N_k\), është \(A_B^* = A_B + l \cdot 10^{24-k}\) me \(1 \leq k \leq 18\) dhe \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Me \( P = 98 - (A_B \mod 97) \) por eshte \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Në përgjithësi vlen për \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Me \(A_B \equiv R_1 \mod 97\) dhe \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) është \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Por tani është \( 0 < R_2 < 97 \) dhe kështu \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) dhe për këtë arsye \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Kjo lë vetëm një ndryshim të mundshëm të një shifre nga \( P \) te \( P^* \neq P \). Këtu por \( N_k \) mbetet e pandryshuar, krijohet shuma e kontrollit \( P \neq P^* \).
  2. Dy IBAN-et e mëposhtme janë të vlefshme:
    $$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ , që kemi rritur dy shifra ngjitur në \(A_1\) me \(97\) . Për më tepër, IBAN nuk është vetëm zyrtarisht i vlefshëm, por kodet bankare bazë 20730001 dhe 20730098 ekzistojnë në të vërtetë.
  3. Ne përpiqemi së pari, \( N_{k_1} \) dhe \( N_{k_2} \) për të ndërruar. E para është \( P = 98 - (A_B \mod 97) \) si \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) me \(l = N_{k_2} - N_{k_1}\) dhe \(1 \leq k_1, k_2 \leq 18\). Tani është për shkak të

    $$\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}\). Kështu është \( P \neq P^* \). Pra, mbetet për t'u kontrolluar \(P_n\) dhe \(N_k\) me \( 1 \leq n \leq 2 \) dhe \( 1 \leq k \leq 18 \) tregton. Ndoshta \(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)\). Që ne \(A_B\) përreth \(l \cdot 10^{24-k}\) ne duhet të ndryshojmë \(P_1\) ose \(P_2\) përreth \(-l\), kështu që \(P\) përreth \(-10^m l\) me \(m \in \{0,1\}\) ndryshim: Atëherë është \(P^* = 98 - R_2\) por gjithashtu \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), rrjedhimisht \(R_2 = R_1 + 10^m l,\) dhe kështu
    $$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Megjithatë, ky ekuacion nuk përmbushet kurrë, siç tregon skenari i mëposhtëm:

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

    Kjo lë vetëm një shkëmbim të mundshëm të \(P_1\) dhe \(P_2\). Këtu por \( N_k \) mbetet e pandryshuar, krijohet shuma e kontrollit \( P \neq P^* \).
  4. Dy IBAN-et e mëposhtme janë të vlefshme:
    $$\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*}$$ Edhe këtu, BIC 20220800 ekziston në të vërtetë.
Mbrapa