Mengenai keteguhan IBAN

Seperti yang diketahui, IBAN Jerman terdiri daripada kod negara (DE), digit cek dua digit (mengikut ISO 7064 ), kod bank (8 digit) dan nombor akaun (termasuk nombor sub-akaun, 10 -digit, digit yang hilang diisi dengan sifar pendahuluan) dan oleh itu ialah 22 -digit. Untuk mengira digit cek, apa yang dipanggil BBAN (kod bank dan nombor akaun) serta kod negara berangka \(1314\) untuk Jerman dan digit cek \(00\) ) dibentuk.


Sebagai contoh, kod bank 21050170 dan nombor akaun 12345678 mengembalikan BBAN 210501700012345678, dikembangkan dengan kod negara dan digit semakan 00 kemudian menghasilkan \(x = 210501700012345678131400\) , di mana \(x = 210501700012345678131400)\8131400\81345678131400, \ \(98 - (x \mod 97)\) 9) \(98 - (x \mod 97)\) . Bukan kebetulan bahawa ini dibahagikan dengan \(97\) . Sebagai nombor perdana dua digit terbesar yang mungkin, ia mengiktiraf entri yang salah seperti digit alih dengan kebarangkalian yang paling besar. Kami kini menunjukkan pernyataan berikut:

  1. Menukar satu digit IBAN yang sah akan menyebabkan IBAN tidak sah.
  2. Menukar dua digit berbeza IBAN yang sah boleh menghasilkan IBAN yang sah.
  3. Jika dua kedudukan berbeza bagi IBAN yang sah ditukar, IBAN yang tidak sah akan dibuat.
  4. Jika anda menukar dua kedudukan berbeza bagi IBAN yang sah dua kali, IBAN yang sah boleh terhasil.

Biarkan $$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 yang sah.

Kemudian $$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$$ yang berkaitan (dilanjutkan dengan kod negara berkod nombor DE dan digit semak \(00\) ).

  1. Tukar sekarang \(N_k\), ialah \(A_B^* = A_B + l \cdot 10^{24-k}\) dengan \(1 \leq k \leq 18\) dan \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Dengan \( P = 98 - (A_B \mod 97) \) tetapi adalah \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Umumnya terpakai kepada \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Dengan \(A_B \equiv R_1 \mod 97\) dan \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) ialah \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Tetapi sekarang ia adalah \( 0 < R_2 < 97 \) maka dengan itu \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) dan oleh itu \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Ini meninggalkan hanya satu kemungkinan perubahan digit daripada \( P \) kepada \( P^* \neq P \). Di sini tetapi \( N_k \) kekal tidak berubah, checksum dibuat \( P \neq P^* \).
  2. Dua IBAN berikut adalah sah:
    $$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Di sinilah anda mengambil kesempatan , bahawa kami menambah dua digit bersebelahan dalam \(A_1\) sebanyak \(97\) . Di samping itu, IBAN bukan sahaja sah secara rasmi, tetapi kod bank asas 20730001 dan 20730098 sebenarnya wujud.
  3. Kita cuba dulu, \( N_{k_1} \) dan \( N_{k_2} \) untuk bertukar. Pertama ialah \( P = 98 - (A_B \mod 97) \) sebagai \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) dengan \(l = N_{k_2} - N_{k_1}\) dan \(1 \leq k_1, k_2 \leq 18\). Sekarang adalah kerana

    $$\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}\). Begitu juga \( P \neq P^* \). Jadi ia masih perlu diperiksa \(P_n\) dan \(N_k\) dengan \( 1 \leq n \leq 2 \) dan \( 1 \leq k \leq 18 \) perdagangan. Mungkin \(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)\). Sejak kami \(A_B\) sekeliling \(l \cdot 10^{24-k}\) kita kena berubah \(P_1\) atau \(P_2\) sekeliling \(-l\), jadi \(P\) sekeliling \(-10^m l\) dengan \(m \in \{0,1\}\) perubahan: Kemudian adalah \(P^* = 98 - R_2\) tetapi juga \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), akibatnya \(R_2 = R_1 + 10^m l,\) maka dengan itu
    $$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Walau bagaimanapun, persamaan ini tidak pernah dipenuhi, seperti yang ditunjukkan oleh skrip berikut:

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

    Ini hanya meninggalkan kemungkinan pertukaran \(P_1\) dan \(P_2\). Di sini tetapi \( N_k \) kekal tidak berubah, checksum dibuat \( P \neq P^* \).
  4. Dua IBAN berikut adalah sah:
    $$\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*}$$ Di sini juga, BIC 20220800 sebenarnya wujud.
Belakang