Như đã biết, IBAN của Đức bao gồm mã quốc gia (DE), một số kiểm tra hai chữ số (theo ISO 7064 ), mã ngân hàng (8 chữ số) và số tài khoản (bao gồm cả số tài khoản phụ, 10 -digit, các chữ số bị thiếu được điền bằng các số 0 ở đầu) và do đó là 22 -digit. Để tính toán số séc, cái gọi là BBAN (mã ngân hàng và số tài khoản) cũng như mã quốc gia bằng số \(1314\) cho Đức và số séc \(00\) ) được tạo thành.
Ví dụ: mã ngân hàng 21050170 và số tài khoản 12345678 trả về BBAN 210501700012345678, được mở rộng bằng mã quốc gia và số kiểm tra 00 thì kết quả là \(x = 210501700012345678131400\) , trong đó số kiểm tra bây giờ là: \(98 - (x \mod 97)\) . Không phải ngẫu nhiên mà số này được chia cho \(97\) . Là số nguyên tố lớn nhất có thể có hai chữ số, nó nhận dạng các mục nhập sai, chẳng hạn như các chữ số được hoán vị với xác suất lớn nhất có thể. Bây giờ chúng tôi hiển thị các tuyên bố sau:
- Thay đổi một chữ số của IBAN hợp lệ sẽ dẫn đến IBAN không hợp lệ.
- 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ệ.
- 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.
- 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\) ).
- 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\) và \((-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\) và \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) Là \( (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^* \).
- Hai IBAN sau hợp lệ:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Đây là nơi bạn tận dụng , chúng tôi đã tăng hai chữ số liền kề trong \(A_1\) lên \(97\) . Ngoài ra, IBAN không chỉ có giá trị về mặt hình thức mà còn có các mã ngân hàng cơ bản 20730001 và 20730098 thực sự tồn tại. - Chúng tôi thử trước, \( N_{k_1} \) và \( 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}\) và \(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\) và \(N_k\) với \( 1 \leq n \leq 2 \) và \( 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\) và \(P_2\). Đây nhưng \( N_k \) vẫn không thay đổi, tổng kiểm tra được tạo \( P \neq P^* \). - 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.