Як відомо, німецький IBAN складається з коду країни (DE), двозначної контрольної цифри (відповідно до ISO 7064 ), коду банку (8 цифр) та номера рахунку (включно з номером субрахунка, 10-значні, пропущені цифри заповнені провідними нулями) і тому є 22-значними. Для обчислення контрольної цифри формується так званий BBAN (код банку та номер рахунку), а також цифровий код країни \(1314\) для Німеччини та контрольна цифра \(00\) ).
Наприклад, код банку 21050170 і номер рахунку 12345678 повертають BBAN 210501700012345678, доповнений кодом країни та контрольною цифрою 00, а потім призведе до \(x = 210501700012345678131400\) , де - зараз: \(98 - (x \mod 97)\) . \(98 - (x \mod 97)\) . Не випадково це ділиться на \(97\) . Як найбільше можливе двозначне просте число, воно з найбільшою ймовірністю розпізнає неправильні записи, наприклад транспоновані цифри. Зараз ми покажемо наступні твердження:
- Зміна однієї цифри дійсного IBAN призведе до недійсного IBAN.
- Зміна двох різних цифр дійсного IBAN може призвести до дійсного IBAN.
- Якщо дві різні позиції дійсного IBAN поміняються місцями, створюється недійсний IBAN.
- Якщо ви двічі поміняєте дві різні позиції дійсного IBAN, може вийти дійсний IBAN.
Нехай $$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}$$ дійсний номер IBAN.
Тоді $$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 (розширений кодом країни з цифровим кодом DE та контрольною цифрою \(00\) ).
- Зміни зараз \(N_k\), є \(A_B^* = A_B + l \cdot 10^{24-k}\) з \(1 \leq k \leq 18\) і \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). З \( P = 98 - (A_B \mod 97) \) але є \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Загалом стосується \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). З \(A_B \equiv R_1 \mod 97\) і \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) є \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Але тепер це так \( 0 < R_2 < 97 \) і, таким чином \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) і, отже \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Це залишає лише одну можливу зміну цифри від \( P \) до \( P^* \neq P \). Тут але \( N_k \) залишається незмінною, контрольна сума створюється \( P \neq P^* \).
- Дійсними є два наступні номери IBAN:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ , що ми збільшили дві сусідні цифри в \(A_1\) на \(97\) . Крім того, IBAN не лише формально дійсний, але й фактично існують базові банківські коди 20730001 та 20730098. - Спробуємо спочатку, \( N_{k_1} \) і \( N_{k_2} \) поміняти місцями. По-перше \( P = 98 - (A_B \mod 97) \) як \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) з \(l = N_{k_2} - N_{k_1}\) і \(1 \leq k_1, k_2 \leq 18\). Зараз через
$$\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}\). Так і є \( P \neq P^* \). Тому це ще потрібно перевірити \(P_n\) і \(N_k\) з \( 1 \leq n \leq 2 \) і \( 1 \leq k \leq 18 \) торгівлі. Можливо \(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)\). Оскільки ми \(A_B\) навколо \(l \cdot 10^{24-k}\) ми повинні змінитися \(P_1\) або \(P_2\) навколо \(-l\), так \(P\) навколо \(-10^m l\) з \(m \in \{0,1\}\) зміна: Тоді є \(P^* = 98 - R_2\) але також \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), отже \(R_2 = R_1 + 10^m l,\) і, таким чином
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Однак це рівняння ніколи не виконується, як показує наступний сценарій:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
Залишається лише можливий обмін \(P_1\) і \(P_2\). Тут але \( N_k \) залишається незмінною, контрольна сума створюється \( P \neq P^* \). - Дійсними є два наступні номери IBAN:
$$\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*}$$ Тут також дійсно існує BIC 20220800.