Comme on le sait, l'IBAN allemand se compose du code du pays (DE), d'un chiffre de contrôle à deux chiffres (selon ISO 7064 ), du code bancaire (à 8 chiffres) et du numéro de compte (y compris le numéro de sous-compte, 10 -chiffre, les chiffres manquants sont remplis de zéros non significatifs) et est donc de 22 chiffres. Pour calculer le chiffre de contrôle, le soi-disant BBAN (code bancaire et numéro de compte) ainsi que le code de pays numérique \(1314\) pour l'Allemagne et le chiffre de contrôle \(00\) ) sont formés.
Par exemple, le code bancaire 21050170 et le numéro de compte 12345678 renvoient le BBAN 210501700012345678, complété par le code pays et le chiffre de contrôle 00, puis donne \(x = 210501700012345678131400\) , où le chiffre de contrôle est désormais : \(98 - (x \mod 97)\) . Ce n'est pas un hasard si cela est divisé par \(97\) . En tant que plus grand nombre premier à deux chiffres possible, il reconnaît les entrées incorrectes telles que les chiffres transposés avec la plus grande probabilité possible. On montre maintenant les énoncés suivants:
- La modification d'un chiffre d'un IBAN valide entraînera un IBAN invalide.
- La modification de deux chiffres différents d'un IBAN valide peut entraîner un IBAN valide.
- Si deux positions différentes d'un IBAN valide sont échangées, un IBAN invalide est créé.
- Si vous échangez deux positions différentes d'un IBAN valide deux fois, un IBAN valide peut en résulter.
Soit $$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 valide.
Alors $$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$$ le BBAN associé (prolongé avec le code pays numéroté DE et le chiffre de contrôle \(00\) ).
- Change maintenant \(N_k\), est \(A_B^* = A_B + l \cdot 10^{24-k}\) avec \(1 \leq k \leq 18\) et \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Avec \( P = 98 - (A_B \mod 97) \) mais est \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). S'applique généralement à \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Avec \(A_B \equiv R_1 \mod 97\) et \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) est \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Mais maintenant c'est \( 0 < R_2 < 97 \) Et ainsi \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) et donc \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Cela ne laisse qu'un seul changement possible d'un chiffre de \( P \) pour \( P^* \neq P \). Ici mais \( N_k \) reste inchangé, la somme de contrôle est créée \( P \neq P^* \).
- Les deux IBAN suivants sont valides :
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ C'est là que vous profitez , que nous avons augmenté deux chiffres adjacents dans \(A_1\) de \(97\) . De plus, l'IBAN n'est pas seulement formellement valide, mais les codes bancaires sous-jacents 20730001 et 20730098 existent réellement. - Nous essayons d'abord, \( N_{k_1} \) et \( N_{k_2} \) à échanger. Le premier est \( P = 98 - (A_B \mod 97) \) comme \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) avec \(l = N_{k_2} - N_{k_1}\) et \(1 \leq k_1, k_2 \leq 18\). C'est maintenant à cause de
$$\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}\). Ainsi est \( P \neq P^* \). Il reste donc à vérifier que \(P_n\) et \(N_k\) avec \( 1 \leq n \leq 2 \) et \( 1 \leq k \leq 18 \) métiers. Peut-être \(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)\). Depuis que nous \(A_B\) environ \(l \cdot 10^{24-k}\) nous devons changer \(P_1\) ou alors \(P_2\) environ \(-l\), alors \(P\) environ \(-10^m l\) avec \(m \in \{0,1\}\) changement : alors est \(P^* = 98 - R_2\) mais aussi \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), En conséquence \(R_2 = R_1 + 10^m l,\) Et ainsi
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Cependant, cette équation n'est jamais remplie, comme le montre le script suivant:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
Cela ne laisse qu'un échange possible de \(P_1\) et \(P_2\). Ici mais \( N_k \) reste inchangé, la somme de contrôle est créée \( P \neq P^* \). - Les deux IBAN suivants sont valides :
$$\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*}$$ Ici aussi, le BIC 20220800 existe réellement.