Det tyska IBAN består som bekant av landskoden (DE), en tvåsiffrig kontrollsiffra (enligt ISO 7064 ), bankkoden (8-siffrig) och kontonumret (inklusive underkontonummer, 10 -siffra, saknade siffror fylls med inledande nollor) och är därför 22 -siffriga. För att beräkna kontrollsiffran bildas det så kallade BBAN (bankkod och kontonummer) samt den numeriska landskoden \(1314\) för Tyskland och kontrollsiffran \(00\) ).
Till exempel, bankkoden 21050170 och kontonumret 12345678 returnerar BBAN 210501700012345678, utökat med landskoden och kontrollsiffran 00 resulterar sedan i \ \(98 - (x \mod 97)\) \(x = 210501700012345678131400\) , där \ check-siffran är 8, nu: \(98 - (x \mod 97)\) . Det är ingen slump att detta delas med \(97\) . Som största möjliga tvåsiffriga primtal känner den igen felaktiga inmatningar såsom transponerade siffror med största möjliga sannolikhet. Vi visar nu följande uttalanden:
- Ändring av en siffra i ett giltigt IBAN kommer att resultera i ett ogiltigt IBAN.
- Att ändra två olika siffror i ett giltigt IBAN kan resultera i ett giltigt IBAN.
- Om två olika positioner av ett giltigt IBAN byts ut, skapas ett ogiltigt IBAN.
- Om du byter två olika positioner av ett giltigt IBAN två gånger, kan ett giltigt IBAN resultera.
Låt $$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}$$ ett giltigt IBAN.
Sedan $$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$$ det associerade BBAN (förlängt med den nummerkodade landskoden DE och kontrollsiffran \(00\) ).
- Byt nu \(N_k\), är \(A_B^* = A_B + l \cdot 10^{24-k}\) med \(1 \leq k \leq 18\) och \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Med \( P = 98 - (A_B \mod 97) \) men är \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Gäller i allmänhet \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Med \(A_B \equiv R_1 \mod 97\) och \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) är \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Men nu är det så \( 0 < R_2 < 97 \) och sålunda \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) och därför \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Detta lämnar bara en möjlig ändring av en siffra från \( P \) till \( P^* \neq P \). Här men \( N_k \) förblir oförändrad skapas kontrollsumman \( P \neq P^* \).
- Följande två IBAN är giltiga:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Det är här du drar nytta , att vi ökade två intilliggande siffror i \(A_1\) med \(97\) . Dessutom är IBAN inte bara formellt giltigt, utan de underliggande bankkoderna 20730001 och 20730098 existerar faktiskt. - Vi försöker först, \( N_{k_1} \) och \( N_{k_2} \) att byta. Först är \( P = 98 - (A_B \mod 97) \) som \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) med \(l = N_{k_2} - N_{k_1}\) och \(1 \leq k_1, k_2 \leq 18\). Nu är på grund av
$$\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}\). Så är det \( P \neq P^* \). Så det återstår att kolla upp det \(P_n\) och \(N_k\) med \( 1 \leq n \leq 2 \) och \( 1 \leq k \leq 18 \) handlar. Kanske \(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)\). Eftersom vi \(A_B\) runt omkring \(l \cdot 10^{24-k}\) vi måste ändra oss \(P_1\) eller \(P_2\) runt omkring \(-l\), så \(P\) runt omkring \(-10^m l\) med \(m \in \{0,1\}\) ändra: Då är \(P^* = 98 - R_2\) men också \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), följaktligen \(R_2 = R_1 + 10^m l,\) och sålunda
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Denna ekvation är dock aldrig uppfylld, vilket följande manus visar:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
Detta lämnar bara ett möjligt utbyte av \(P_1\) och \(P_2\). Här men \( N_k \) förblir oförändrad skapas kontrollsumman \( P \neq P^* \). - Följande två IBAN är giltiga:
$$\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*}$$ Även här finns faktiskt BIC 20220800.