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:
- Ngganti siji digit saka IBAN sing bener bakal nyebabake IBAN sing ora bener.
- Ngganti rong digit beda saka IBAN sing bener bisa nyebabake IBAN sing bener.
- Yen rong posisi beda saka IBAN sing sah diganti, IBAN sing ora sah digawe.
- 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\) ).
- 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^* \).
- 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. - 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^* \). - 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.