Ως γνωστόν, ο γερμανικός IBAN αποτελείται από τον κωδικό χώρας (DE), ένα διψήφιο ψηφίο ελέγχου (σύμφωνα με το ISO 7064 ), τον κωδικό τράπεζας (8-ψήφιο) και τον αριθμό λογαριασμού (συμπεριλαμβανομένου του αριθμού υπολογαριασμού, 10 -ψηφίο, τα ψηφία που λείπουν συμπληρώνονται με μηδενικά αρχικά) και επομένως είναι 22-ψήφιο. Για τον υπολογισμό του ψηφίου ελέγχου, σχηματίζεται το λεγόμενο BBAN (κωδικός τράπεζας και αριθμός λογαριασμού) καθώς και ο αριθμητικός κωδικός χώρας \(1314\) για τη Γερμανία και το ψηφίο ελέγχου \(00\) ).
Για παράδειγμα, ο τραπεζικός κωδικός 21050170 και ο αριθμός λογαριασμού 12345678 επιστρέφουν το BBAN 210501700012345678, με επέκταση με τον κωδικό χώρας και το ψηφίο ελέγχου 00 και, στη συνέχεια, έχει ως αποτέλεσμα \(x = 210501700012345678131400\) το ψηφίο ελέγχου 00 \(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.