Σχετικά με την ευρωστία του 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.
Πίσω