ஜெர்மன் 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 உண்மையில் உள்ளது.