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 உண்மையில் உள்ளது.
மீண்டும்