អំពីភាពរឹងមាំរបស់ 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. IBANs ពីរខាងក្រោមមានសុពលភាព៖
    $$\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 ពិតជាមាន។
ថយក្រោយ