Bilindiği gibi, Alman IBAN'ı ülke kodu (DE), iki basamaklı bir kontrol basamağı ( ISO 7064'e göre), banka kodu (8 basamaklı) ve hesap numarasından (alt hesap numarası, 10 basamaklı, eksik basamaklar baştaki sıfırlarla doldurulur) ve bu nedenle 22 basamaklıdır. Kontrol basamağını hesaplamak için, sözde BBAN (banka kodu ve hesap numarası) ve ayrıca Almanya için sayısal ülke kodu \(1314\) ve kontrol basamağı \(00\) ) oluşturulur.
Örneğin, banka kodu 21050170 ve hesap numarası 12345678, BBAN 210501700012345678'i döndürür, ülke koduyla genişletilir ve 00 kontrol basamağı daha sonra \(x = 210501700012345678131400\) ile sonuçlanır, burada kontrol basamağı şimdi: \(98 - (x \mod 97)\) . Bunun \(97\) ile bölünmesi tesadüf değildir. Mümkün olan en büyük iki basamaklı asal sayı olarak, olası en büyük olasılıkla yer değiştiren rakamlar gibi yanlış girişleri tanır. Şimdi aşağıdaki ifadeleri gösteriyoruz:
- Geçerli bir IBAN'ın bir rakamını değiştirmek geçersiz bir IBAN'a neden olur.
- Geçerli bir IBAN'ın iki farklı basamağını değiştirmek, geçerli bir IBAN ile sonuçlanabilir.
- Geçerli bir IBAN'ın iki farklı konumu değiştirilirse, geçersiz bir IBAN oluşturulur.
- Geçerli bir IBAN'ın iki farklı pozisyonunu iki kez değiştirirseniz, geçerli bir IBAN ortaya çıkabilir.
$$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}$$ geçerli bir IBAN.
Sonra $$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$$ ilişkili BBAN (sayı kodlu ülke kodu DE ve kontrol basamağı \(00\) ile genişletilir).
- Şimdi değiştir \(N_k\), dır-dir \(A_B^* = A_B + l \cdot 10^{24-k}\) ile birlikte \(1 \leq k \leq 18\) ve \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). İle birlikte \( P = 98 - (A_B \mod 97) \) ama \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). Genel olarak geçerlidir \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). İle birlikte \(A_B \equiv R_1 \mod 97\) ve \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) dır-dir \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). Ama şimdi öyle \( 0 < R_2 < 97 \) ve böylece \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) ve bu nedenle \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). Bu, bir rakamın yalnızca bir olası değişikliğini bırakır. \( P \) ile \( P^* \neq P \). Burada ama \( N_k \) değişmeden kalır, sağlama toplamı oluşturulur \( P \neq P^* \).
- Aşağıdaki iki IBAN geçerlidir:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ Burada avantaj elde edersiniz , \(A_1\) içindeki iki bitişik basamağı \(97\) kadar artırdık. Ayrıca, IBAN yalnızca resmi olarak geçerli değildir, aynı zamanda 20730001 ve 20730098 temel banka kodları da fiilen mevcuttur. - Ilk biz deneriz, \( N_{k_1} \) ve \( N_{k_2} \) takas etmek. ilk \( P = 98 - (A_B \mod 97) \) gibi \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) ile birlikte \(l = N_{k_2} - N_{k_1}\) ve \(1 \leq k_1, k_2 \leq 18\). Şimdi çünkü
$$\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}\). Öyle \( P \neq P^* \). Bu yüzden kontrol edilmesi gereken kalır \(P_n\) ve \(N_k\) ile birlikte \( 1 \leq n \leq 2 \) ve \( 1 \leq k \leq 18 \) ticaret. Belki \(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)\). Bizden beri \(A_B\) etrafında \(l \cdot 10^{24-k}\) değişmek zorundayız \(P_1\) veya \(P_2\) etrafında \(-l\), böyle \(P\) etrafında \(-10^m l\) ile birlikte \(m \in \{0,1\}\) değişiklik: O zaman \(P^* = 98 - R_2\) Ayrıca \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), sonuç olarak \(R_2 = R_1 + 10^m l,\) ve böylece
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ Ancak, aşağıdaki komut dosyasının gösterdiği gibi, bu denklem hiçbir zaman yerine getirilmez.:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
Bu, yalnızca olası bir alışverişi bırakır \(P_1\) ve \(P_2\). Burada ama \( N_k \) değişmeden kalır, sağlama toplamı oluşturulur \( P \neq P^* \). - Aşağıdaki iki IBAN geçerlidir:
$$\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*}$$ Burada da BIC 20220800 gerçekten var.