Как известно, немецкий IBAN состоит из кода страны (DE), двухзначной контрольной цифры (согласно ISO 7064 ), кода банка (8-значного) и номера счета (включая номер субсчета, 10). -цифра, пропущенные цифры заполняются ведущими нулями) и, следовательно, является 22-значной. Для вычисления контрольной цифры формируются так называемые BBAN (код банка и номер счета), а также числовой код страны \(1314\) для Германии и контрольная цифра \(00\) ).
Например, код банка 21050170 и номер счета 12345678 возвращают BBAN 210501700012345678, дополненный кодом страны и контрольной цифрой 00, а затем приводят к \(x = 210501700012345678131400\) , где теперь контрольная цифра: \(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.