كما هو معروف ، يتكون رقم IBAN الألماني من رمز البلد (DE) ، ورقم التحقق المكون من رقمين (وفقًا لمعيار ISO 7064 ) ، ورمز البنك (المكون من 8 أرقام) ورقم الحساب (بما في ذلك رقم الحساب الفرعي ، 10 أرقام مفقودة مليئة بالأصفار البادئة) وبالتالي فهي 22 رقمًا. لحساب رقم التحقق ، يتم تشكيل ما يسمى BBAN (رمز البنك ورقم الحساب) بالإضافة إلى رمز البلد الرقمي \(1314\) لألمانيا ورقم التحقق \(00\) ).
على سبيل المثال ، يُرجع رمز البنك 21050170 ورقم الحساب 12345678 BBAN 210501700012345678 ، موسعًا برمز البلد ورقم التحقق 00 ثم ينتج عنه \(x = 210501700012345678131400\) ، حيث يكون رقم التحقق الآن: \(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$$ BBAN المرتبط (ممتد برمز البلد المرمز بالرقم 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 موجود بالفعل.