حول متانة IBAN

كما هو معروف ، يتكون رقم IBAN الألماني من رمز البلد (DE) ، ورقم التحقق المكون من رقمين (وفقًا لمعيار ISO 7064 ) ، ورمز البنك (المكون من 8 أرقام) ورقم الحساب (بما في ذلك رقم الحساب الفرعي ، 10 أرقام مفقودة مليئة بالأصفار البادئة) وبالتالي فهي 22 رقمًا. لحساب رقم التحقق ، يتم تشكيل ما يسمى BBAN (رمز البنك ورقم الحساب) بالإضافة إلى رمز البلد الرقمي \(1314\) لألمانيا ورقم التحقق \(00\) ).


على سبيل المثال ، يُرجع رمز البنك 21050170 ورقم الحساب 12345678 BBAN 210501700012345678 ، موسعًا برمز البلد ورقم التحقق 00 ثم ينتج عنه \(x = 210501700012345678131400\) ، حيث يكون رقم التحقق الآن: \(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$$ BBAN المرتبط (ممتد برمز البلد المرمز بالرقم 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 موجود بالفعل.
عودة