Zoals bekend bestaat het Duitse IBAN uit de landcode (DE), een tweecijferig controlecijfer (volgens ISO 7064 ), de bankcode (8 cijfers) en het rekeningnummer (inclusief subrekeningnummer, 10 -cijfer, ontbrekende cijfers worden opgevuld met voorloopnullen) en is daarom 22 -cijferig. Om het controlecijfer te berekenen, worden zowel de zogenaamde BBAN (bankcode en rekeningnummer) als de numerieke landcode \(1314\) voor Duitsland en het controlecijfer \(00\) ) gevormd.
Bijvoorbeeld, de bankcode 21050170 en het rekeningnummer 12345678 retourneren de BBAN 210501700012345678, uitgebreid met de landcode en het controlecijfer 00 resulteert dan in \(x = 210501700012345678131400\) , waarbij het controlecijfer nu is: \(98 - (x \mod 97)\) . Het is geen toeval dat dit wordt gedeeld door \(97\) . Als het grootst mogelijke priemgetal van twee cijfers herkent het onjuiste invoer, zoals getransponeerde cijfers, met de grootst mogelijke waarschijnlijkheid. We laten nu de volgende uitspraken zien::
- Het wijzigen van één cijfer van een geldig IBAN resulteert in een ongeldig IBAN.
- Het wijzigen van twee verschillende cijfers van een geldige IBAN kan resulteren in een geldige IBAN.
- Als twee verschillende posities van een geldige IBAN worden verwisseld, wordt een ongeldige IBAN aangemaakt.
- Als u twee verschillende posities van een geldige IBAN twee keer omwisselt, kan een geldige IBAN ontstaan.
Laat $$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}$$ een geldig IBAN.
Dan $$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$$ de bijbehorende BBAN (uitgebreid met de gecodeerde landcode DE en het controlecijfer \(00\) ).
- Verander nu \(N_k\), is \(A_B^* = A_B + l \cdot 10^{24-k}\) met \(1 \leq k \leq 18\) en \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Met \( P = 98 - (A_B \mod 97) \) maar is \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Over het algemeen van toepassing op: \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Met \(A_B \equiv R_1 \mod 97\) en \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) is \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Maar nu is het \( 0 < R_2 < 97 \) en daarom \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) en daarom \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Dit laat slechts één mogelijke verandering van een cijfer over van \( P \) tot \( P^* \neq P \). Hier maar \( N_k \) blijft ongewijzigd, de controlesom wordt gemaakt \( P \neq P^* \).
- De volgende twee IBAN's zijn geldig:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Hier profiteert u van , dat we twee aangrenzende cijfers in \(A_1\) hebben verhoogd met \(97\) . Daarnaast is het IBAN niet alleen formeel geldig, maar bestaan de onderliggende bankcodes 20730001 en 20730098 ook daadwerkelijk. - We proberen eerst, \( N_{k_1} \) en \( N_{k_2} \) te ruilen. De eerste is \( P = 98 - (A_B \mod 97) \) net zo \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) met \(l = N_{k_2} - N_{k_1}\) en \(1 \leq k_1, k_2 \leq 18\). Nu is vanwege
$$\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}\). Zo is \( P \neq P^* \). Dus dat moet nog worden gecontroleerd \(P_n\) en \(N_k\) met \( 1 \leq n \leq 2 \) en \( 1 \leq k \leq 18 \) handelt. Misschien \(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)\). Sinds we \(A_B\) rondom \(l \cdot 10^{24-k}\) we moeten veranderen \(P_1\) of \(P_2\) rondom \(-l\), dus \(P\) rondom \(-10^m l\) met \(m \in \{0,1\}\) veranderen: Dan is \(P^* = 98 - R_2\) maar ook \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), bijgevolg \(R_2 = R_1 + 10^m l,\) en daarom
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Aan deze vergelijking wordt echter nooit voldaan, zoals het volgende script laat zien:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
Dit laat alleen een mogelijke uitwisseling van \(P_1\) en \(P_2\). Hier maar \( N_k \) blijft ongewijzigd, de controlesom wordt gemaakt \( P \neq P^* \). - De volgende twee IBAN's zijn geldig:
$$\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*}$$ Ook hier bestaat de BIC 20220800 daadwerkelijk.