Про надійність IBAN

Як відомо, німецький 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\) . Як найбільше можливе двозначне просте число, воно з найбільшою ймовірністю розпізнає неправильні записи, наприклад транспоновані цифри. Зараз ми покажемо наступні твердження:

  1. Зміна однієї цифри дійсного IBAN призведе до недійсного IBAN.
  2. Зміна двох різних цифр дійсного IBAN може призвести до дійсного IBAN.
  3. Якщо дві різні позиції дійсного IBAN поміняються місцями, створюється недійсний IBAN.
  4. Якщо ви двічі поміняєте дві різні позиції дійсного 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\) ).

  1. Зміни зараз \(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^* \).
  2. Дійсними є два наступні номери 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.
  3. Спробуємо спочатку, \( 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^* \).
  4. Дійсними є два наступні номери 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.
Назад