درباره استحکام IBAN

IBAN آلمانی شامل کد کشور (DE)، یک رقم کنترلی دو رقمی (مطابق با ISO 7064 )، کد بانک (8 رقم) و شماره حساب (شامل شماره حساب فرعی، 10 رقم، ارقام حذف شده با صفرهای ابتدایی) است که طول آن را به 22 کاراکتر می‌رساند. برای محاسبه رقم کنترلی، ابتدا یک دنباله از به اصطلاح BBAN (کد بانک و شماره حساب)، کد عددی کشور \(1314\) برای آلمان و رقم کنترلی \(00\) تشکیل می‌شود.


به عنوان مثال، کد مرتب‌سازی بانکی 21050170 و شماره حساب 12345678 BBAN 210501700012345678 را ارائه می‌کند که با کد کشور و رقم چک 00 گسترش یافته و سپس به \(x = 210501700012345678131400\) ، check: \(98 - (x \mod 97)\) . این واقعیت که این تقسیم بر \(97\) است تصادفی نیست. به‌عنوان بزرگ‌ترین عدد اول دو رقمی ممکن، شناسایی ورودی‌های نادرست مانند اعداد جابجا شده تا حد امکان امکان‌پذیر است. اکنون یافته های زیر را نشان می دهیم:

  1. تغییر یک رقم از یک IBAN معتبر منجر به یک IBAN نامعتبر می شود.
  2. تغییر دو رقم مختلف از یک IBAN معتبر می تواند منجر به یک IBAN معتبر شود.
  3. اگر دو موقعیت مختلف از یک IBAN معتبر با هم عوض شوند، یک IBAN نامعتبر ایجاد می شود.
  4. اگر دو موقعیت مختلف از یک 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\) ) .

  1. اکنون تغییر دهید \(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^* \).
  2. دو 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 در واقع وجود دارند.
  3. اول تلاش می کنیم, \( 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^* \).
  4. دو 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 در واقع وجود دارد.
بازگشت