Mint ismeretes, a német IBAN az országkódból (DE), egy kétjegyű ellenőrző számjegyből (az ISO 7064 szerint), a bankkódból (8 számjegyű) és a számlaszámból (alszámlaszámmal együtt, 10 számjegyű, a hiányzó számjegyek kezdő nullákkal vannak kitöltve), ezért 22 számjegyű. Az ellenőrző szám kiszámításához létrejön az úgynevezett BBAN (bankkód és számlaszám), valamint a numerikus országkód \(1314\) Németországban és a \(00\) ) ellenőrző szám.
Például a 21050170 bankkód és a 12345678 számlaszám visszaadja a BBAN 210501700012345678 BBAN-t, kibővítve az országkóddal és a 00-as ellenőrző számjegygel, majd a következőt eredményezi: \(x = 210501700012345678131400\) \(98 - (x \mod 97)\) ahol a csekk 3 \(98 - (x \mod 97)\) . Nem véletlen, hogy ezt osztják \(97\) . A lehető legnagyobb kétjegyű prímszámként a lehető legnagyobb valószínűséggel ismeri fel a helytelen bejegyzéseket, például a transzponált számjegyeket. Most a következő állításokat mutatjuk be:
- Az érvényes IBAN egy számjegyének megváltoztatása érvénytelen IBAN-t eredményez.
- Egy érvényes IBAN két különböző számjegyének megváltoztatása érvényes IBAN-t eredményezhet.
- Ha egy érvényes IBAN két különböző pozícióját felcserélik, érvénytelen IBAN jön létre.
- Ha egy érvényes IBAN két különböző pozícióját kétszer felcseréli, akkor érvényes IBAN keletkezhet.
Legyen $$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}$$ érvényes IBAN.
Ekkor $$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$$ a kapcsolódó BBAN (kibővítve a DE számkódolt országkóddal és a \(00\) ellenőrző számjegygel).
- Változtass most \(N_k\), van \(A_B^* = A_B + l \cdot 10^{24-k}\) val vel \(1 \leq k \leq 18\) és \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Val vel \( P = 98 - (A_B \mod 97) \) de van \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Általában vonatkozik \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Val vel \(A_B \equiv R_1 \mod 97\) és \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) van \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). De most az \( 0 < R_2 < 97 \) és így \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) és ezért \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Ez csak egy számjegy lehetséges változását hagyja hátra \( P \) nak nek \( P^* \neq P \). Itt de \( N_k \) változatlan marad, akkor létrejön az ellenőrző összeg \( P \neq P^* \).
- A következő két IBAN érvényes:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ , ahol kihasználhatja a $ előnyt , hogy a \(A_1\) két szomszédos számjegyét megnöveltük \(97\) -vel. Ráadásul az IBAN nem csak formálisan érvényes, hanem az alapul szolgáló 20730001 és 20730098 bankkódok is léteznek. - Először megpróbáljuk, \( N_{k_1} \) és \( N_{k_2} \) cserélni. Az első az \( P = 98 - (A_B \mod 97) \) mint \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) val vel \(l = N_{k_2} - N_{k_1}\) és \(1 \leq k_1, k_2 \leq 18\). Most azért van
$$\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}\). Így van \( P \neq P^* \). Tehát ezt még ellenőrizni kell \(P_n\) és \(N_k\) val vel \( 1 \leq n \leq 2 \) és \( 1 \leq k \leq 18 \) kereskedik. Lehet \(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)\). Mióta mi \(A_B\) körül \(l \cdot 10^{24-k}\) változnunk kell \(P_1\) vagy \(P_2\) körül \(-l\), így \(P\) körül \(-10^m l\) val vel \(m \in \{0,1\}\) változás: Akkor van \(P^* = 98 - R_2\) de szintén \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), következésképpen \(R_2 = R_1 + 10^m l,\) és így
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Ez az egyenlet azonban soha nem teljesül, amint azt a következő szkript mutatja:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
Ez csak egy lehetséges cserét hagy hátra \(P_1\) és \(P_2\). Itt de \( N_k \) változatlan marad, akkor létrejön az ellenőrző összeg \( P \neq P^* \). - A következő két IBAN érvényes:
$$\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*}$$ Itt is létezik a BIC 20220800.