Σχετικά με την ευρωστία του IBAN

Ως γνωστόν, ο γερμανικός IBAN αποτελείται από τον κωδικό χώρας (DE), ένα διψήφιο ψηφίο ελέγχου (σύμφωνα με το ISO 7064 ), τον κωδικό τράπεζας (8-ψήφιο) και τον αριθμό λογαριασμού (συμπεριλαμβανομένου του αριθμού υπολογαριασμού, 10 -ψηφίο, τα ψηφία που λείπουν συμπληρώνονται με μηδενικά αρχικά) και επομένως είναι 22-ψήφιο. Για τον υπολογισμό του ψηφίου ελέγχου, σχηματίζεται το λεγόμενο BBAN (κωδικός τράπεζας και αριθμός λογαριασμού) καθώς και ο αριθμητικός κωδικός χώρας \(1314\) για τη Γερμανία και το ψηφίο ελέγχου \(00\) ).


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