همانطور که مشخص است، IBAN آلمان شامل کد کشور (DE)، یک رقم چک دو رقمی (براساس ISO 7064 )، کد بانک (8 رقمی) و شماره حساب (شامل شماره حساب فرعی، ارقام 10 رقمی گمشده با صفرهای ابتدایی پر می شوند) و بنابراین 22 رقمی است. برای محاسبه رقم چک، به اصطلاح BBAN (کد بانکی و شماره حساب) و همچنین کد عددی کشور \(1314\) برای آلمان و رقم چک \(00\) ) تشکیل می شود.
به عنوان مثال، کد بانکی 21050170 و شماره حساب 12345678 BBAN 210501700012345678 را باز می گرداند، با کد کشور و رقم چک 00 گسترش یافته و سپس به \(x = 210501700012345678131400\) \(98 - (x \mod 97)\) ، \(98 - (x \mod 97)\) . تصادفی نیست که این تقسیم بر \(97\) است. به عنوان بزرگترین عدد اول دو رقمی ممکن، ورودی های نادرست مانند ارقام جابجا شده را با بیشترین احتمال ممکن تشخیص می دهد. اکنون عبارات زیر را نشان می دهیم:
- تغییر یک رقم از یک IBAN معتبر منجر به یک IBAN نامعتبر می شود.
- تغییر دو رقم مختلف از یک IBAN معتبر می تواند منجر به یک IBAN معتبر شود.
- اگر دو موقعیت مختلف از یک IBAN معتبر با هم عوض شوند، یک IBAN نامعتبر ایجاد می شود.
- اگر دو موقعیت مختلف از یک IBAN معتبر را دو بار عوض کنید، یک IBAN معتبر می تواند به وجود بیاید.
اجازه دهید $$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 معتبر.
سپس $$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$$ مرتبط (با کد کشور DE با کد اعداد و رقم بررسی \(00\) ) .
- اکنون تغییر دهید \(N_k\), است \(A_B^* = A_B + l \cdot 10^{24-k}\) با \(1 \leq k \leq 18\) و \((-1) \cdot N_k \leq l \leq 9-N_k \wedge l \neq 0\). با \( P = 98 - (A_B \mod 97) \) اما است \(P^* = 98 - \left((A_B + l \cdot 10^{24-k}) \mod 97\right) \). به طور کلی اعمال می شود \( a \equiv a' \mod m, b \equiv b' \mod m \): \(a + b \equiv a' + b' \mod m\). با \(A_B \equiv R_1 \mod 97\) و \(l \cdot 10^{24-k} \equiv R_2 \mod 97\) است \( (A_B + l \cdot 10^{24-k}) \equiv R_1 + R_2 \mod 97 \). اما الان هست \( 0 < R_2 < 97 \) و بنابراین \( P^* = 98 - (R_1+R_2) \neq 98 - R_1 = P \) و بنابراین \( P_1 \neq P_1^* \vee P_2 \neq P_2^* \). این تنها یک تغییر ممکن از یک رقم را باقی می گذارد \( P \) به \( P^* \neq P \). اینجا اما \( N_k \) بدون تغییر باقی می ماند، چک جمع ایجاد می شود \( P \neq P^* \).
- دو IBAN زیر معتبر هستند:
$$\begin{align} A_1 = DE89207300\boldsymbol{\color{red}01}0012345674 \\ A_2 = DE89207300\boldsymbol{\color{red}98}0012345674 \end{align}$$ مزیت را دارید ، که دو رقم مجاور در \(A_1\) را به \(97\) افزایش دادیم. علاوه بر این، IBAN نه تنها به طور رسمی معتبر است، بلکه کدهای بانکی زیربنایی 20730001 و 20730098 در واقع وجود دارند. - اول تلاش می کنیم, \( N_{k_1} \) و \( N_{k_2} \) به مبادله. اول است \( P = 98 - (A_B \mod 97) \) مانند \(P^* = 98 - \left((A_B + l \cdot 10^{24-k_1} - l \cdot 10^{24-k_2}) \mod 97\right) \) با \(l = N_{k_2} - N_{k_1}\) و \(1 \leq k_1, k_2 \leq 18\). الان به خاطر
$$\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}\). همینطور است \( P \neq P^* \). پس باید آن را بررسی کرد \(P_n\) و \(N_k\) با \( 1 \leq n \leq 2 \) و \( 1 \leq k \leq 18 \) معامله می کند. شاید \(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)\). از زمانی که ما \(A_B\) دور و بر \(l \cdot 10^{24-k}\) ما باید تغییر کنیم \(P_1\) یا \(P_2\) دور و بر \(-l\), بنابراین \(P\) دور و بر \(-10^m l\) با \(m \in \{0,1\}\) تغییر: سپس است \(P^* = 98 - R_2\) اما همچنین \(P^* = P - 10^m l = 98 - R_1 - 10^m l\), در نتیجه \(R_2 = R_1 + 10^m l,\) و بنابراین
$$((A_B \mod 97) + (l \cdot 10^{24-k} \mod 97)) \mod 97 = (A_B \mod 97) + 10^m l$$ با این حال، همانطور که اسکریپت زیر نشان می دهد، این معادله هرگز برآورده نمی شود:See the Pen IBAN FORMULA CHECK by David Vielhuber (@vielhuber) on CodePen.
این تنها یک تبادل احتمالی باقی می گذارد \(P_1\) و \(P_2\). اینجا اما \( N_k \) بدون تغییر باقی می ماند، چک جمع ایجاد می شود \( P \neq P^* \). - دو IBAN زیر معتبر هستند:
$$\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*}$$ در اینجا نیز، BIC 20220800 در واقع وجود دارد.