Babagan kakuwatan IBAN

Kaya sing dingerteni, IBAN Jerman kasusun saka kode negara (DE), digit cek rong digit (miturut ISO 7064 ), kode bank (8 digit) lan nomer akun (kalebu nomer sub-akun, 10-digit, ilang digit kapenuhan nul anjog) lan mulane 22 -digit. Kanggo ngetung digit cek, sing diarani BBAN (kode bank lan nomer akun) uga kode negara numerik \(1314\) kanggo Jerman lan digit cek \(00\) ) dibentuk.


Contone, kode bank 21050170 lan nomer akun 12345678 ngasilake BBAN 210501700012345678, ditambahi karo kode negara lan digit mriksa 00 banjur ngasilake \ \(98 - (x \mod 97)\) \(x = 210501700012345678131400\) \(98 - (x \mod 97)\) . Ora kebeneran yen iki dibagi karo \(97\) . Minangka nomer prima rong digit paling gedhe, iki ngenali entri sing salah kayata digit transposed kanthi kemungkinan paling gedhe. Saiki kita nuduhake statement ing ngisor iki:

  1. Ngganti siji digit saka IBAN sing bener bakal nyebabake IBAN sing ora bener.
  2. Ngganti rong digit beda saka IBAN sing bener bisa nyebabake IBAN sing bener.
  3. Yen rong posisi beda saka IBAN sing sah diganti, IBAN sing ora sah digawe.
  4. Yen sampeyan ngganti rong posisi beda saka IBAN sing sah kaping pindho, IBAN sing sah bisa kasil.

Ayo $$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 sing sah.

Banjur $$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$$ sing digandhengake (ditambahi karo kode negara kode DE lan digit mriksa \(00\) ).

  1. Ganti saiki \(N_k\), punika \(A_B^* = A_B + l \cdot 10^{24-k}\) karo \(1 \leq k \leq 18\) lan \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). Karo \( P = 98 - (A_B \mod 97) \) nanging punika \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Umume ditrapake kanggo \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). Karo \(A_B \equiv R_1 \mod 97\) lan \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) punika \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Nanging saiki wis \( 0 < R_2 < 97 \) lan kanthi mangkono \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) lan mulane \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Iki ninggalake mung siji bisa ngganti digit saka \( P \) kanggo \( P^* \neq P \). Kene nanging \( N_k \) tetep ora owah, checksum digawe \( P \neq P^* \).
  2. Loro IBAN ing ngisor iki sah:
    $$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Iki ngendi sampeyan njupuk kauntungan , sing kita tambah loro digit jejer ing \(A_1\) dening \(97\) . Kajaba iku, IBAN ora mung sah sacara resmi, nanging kode bank dhasar 20730001 lan 20730098 pancen ana.
  3. Kita nyoba dhisik, \( N_{k_1} \) lan \( N_{k_2} \) kanggo swap. Pisanan yaiku \( P = 98 - (A_B \mod 97) \) minangka \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) karo \(l = N_{k_2} - N_{k_1}\) lan \(1 \leq k_1, k_2 \leq 18\). Saiki amarga saka

    $$\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}\). Mangkono uga \( P \neq P^* \). Dadi isih kudu dipriksa \(P_n\) lan \(N_k\) karo \( 1 \leq n \leq 2 \) lan \( 1 \leq k \leq 18 \) dagang. Bisa uga \(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)\). Awit kita \(A_B\) watara \(l \cdot 10^{24-k}\) kita kudu ngganti \(P_1\) utawa \(P_2\) watara \(-l\), dadi \(P\) watara \(-10^m l\) karo \(m \in \{0,1\}\) owah-owahan: Banjur iku \(P^* = 98 - R_2\) nanging uga \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), akibate \(R_2 = R_1 + 10^m l,\) lan kanthi mangkono
    $$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Nanging, persamaan iki ora tau kawujud, kaya sing ditampilake ing skrip ing ngisor iki:

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

    Iki godhong mung exchange bisa saka \(P_1\) lan \(P_2\). Kene nanging \( N_k \) tetep ora owah, checksum digawe \( P \neq P^* \).
  4. Loro IBAN ing ngisor iki 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*}$$ Ing kene uga, BIC 20220800 pancen ana.
Bali