Về tính mạnh mẽ của IBAN

Mã IBAN của Đức bao gồm mã quốc gia (DE), một chữ số kiểm tra gồm hai chữ số (theo tiêu chuẩn ISO 7064 ), mã ngân hàng (8 chữ số) và số tài khoản (bao gồm số tài khoản phụ, 10 chữ số, các chữ số bị thiếu được thêm số 0 ở đầu), tổng cộng là 22 ký tự. Để tính toán chữ số kiểm tra, trước tiên người ta tạo một chuỗi từ mã BBAN (mã ngân hàng và số tài khoản), mã quốc gia số \(1314\) của Đức và chữ số kiểm tra \(00\) .


Ví dụ, mã ngân hàng 21050170 và số tài khoản 12345678 tạo ra BBAN 210501700012345678. Mở rộng điều này với mã quốc gia và chữ số kiểm tra 00 ta được \(x = 210501700012345678131400\) , trong đó chữ số kiểm tra bây giờ là: \(98 - (x \mod 97)\) . Phép chia cho \(97\) không phải là ngẫu nhiên. Là số nguyên tố hai chữ số lớn nhất có thể, nó phát hiện các lỗi như hoán vị chữ số với xác suất cao nhất có thể. Bây giờ chúng ta sẽ trình bày các quan sát sau.:

  1. Thay đổi một chữ số của IBAN hợp lệ sẽ dẫn đến IBAN không hợp lệ.
  2. Việc thay đổi hai chữ số khác nhau của IBAN hợp lệ có thể dẫn đến IBAN hợp lệ.
  3. Nếu hai vị trí khác nhau của IBAN hợp lệ được hoán đổi cho nhau, thì IBAN không hợp lệ sẽ được tạo.
  4. Nếu bạn hoán đổi hai vị trí khác nhau của IBAN hợp lệ hai lần, IBAN hợp lệ có thể dẫn đến.

Cho $$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}$$ một IBAN hợp lệ.

Sau đó $$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$$ được liên kết (được mở rộng với mã quốc gia được mã hóa bằng số DE và số kiểm tra \(00\) ).

  1. Thay đổi ngay bây giờ \(N_k\), Là \(A_B^* = A_B + l \cdot 10^{24-k}\) với \(1 \leq k \leq 18\)\((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Với \( P = 98 - (A_B \mod 97) \) nhung la \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Nói chung áp dụng cho \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Với \(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 \). Nhưng bây giờ nó là \( 0 < R_2 < 97 \) và như vậy \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) và do đó \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Điều này chỉ để lại một thay đổi có thể có của một chữ số từ \( P \) đến \( P^* \neq P \). Đây nhưng \( N_k \) vẫn không thay đổi, tổng kiểm tra được tạo \( P \neq P^* \).
  2. Hai số IBAN sau đây là hợp lệ:
    $$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Ở đây, chúng ta tận dụng thực tế là chúng ta đã tăng hai chữ số liền kề trong \(A_1\) lên \(97\) . Hơn nữa, IBAN không chỉ hợp lệ về mặt hình thức mà các mã ngân hàng cơ bản 20730001 và 20730098 thực sự tồn tại.
  3. Chúng tôi thử trước, \( N_{k_1} \)\( N_{k_2} \) để hoán đổi. Đầu tiên là \( P = 98 - (A_B \mod 97) \) như \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) với \(l = N_{k_2} - N_{k_1}\)\(1 \leq k_1, k_2 \leq 18\). Bây giờ là vì

    $$\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}\). Cũng vậy \( P \neq P^* \). Vì vậy, nó vẫn cần được kiểm tra rằng \(P_n\)\(N_k\) với \( 1 \leq n \leq 2 \)\( 1 \leq k \leq 18 \) giao dịch. Có lẽ \(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)\). Kể từ khi chúng tôi \(A_B\) vòng quanh \(l \cdot 10^{24-k}\) chúng ta phải thay đổi \(P_1\) hoặc \(P_2\) vòng quanh \(-l\), vì thế \(P\) vòng quanh \(-10^m l\) với \(m \in \{0,1\}\) thay đổi: Sau đó là \(P^* = 98 - R_2\) nhưng cũng \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), hậu quả là \(R_2 = R_1 + 10^m l,\) và như vậy
    $$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Tuy nhiên, phương trình này không bao giờ được thực hiện, như đoạn mã sau cho thấy:

    See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.

    Điều này chỉ để lại một sự trao đổi có thể xảy ra \(P_1\)\(P_2\). Đây nhưng \( N_k \) vẫn không thay đổi, tổng kiểm tra được tạo \( P \neq P^* \).
  4. Hai IBAN sau hợp lệ:
    $$\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*}$$ Đây cũng là BIC 20220800 thực sự tồn tại.
Trở lại