IBANдын бекемдиги жөнүндө

Белгилүү болгондой, немис IBAN өлкө кодунан (DE), эки сандуу текшерүү санынан ( ISO 7064 ылайык), банк кодунан (8 орундуу) жана эсеп номеринен (анын ичинде субэсептин номеринен, 10) турат. -сан, жетишпеген цифралар алдыңкы нөлдөр менен толтурулат), демек 22 - цифра. Текшерүү цифрасын эсептөө үчүн BBAN деп аталган (банк коду жана эсептин номери), ошондой эле Германия үчүн өлкөнүн сандык коду \(1314\) жана чек саны \(00\) ) түзүлөт.


Мисалы, банк коду 21050170 жана эсеп номери 12345678 өлкө коду менен кеңейтилген BBAN 210501700012345678ди кайтарат жана 00 чек саны \(x = 210501700012345678131400\) \(98 - (x \mod 97)\) азыр текшерүү: \(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$$ 131400 $$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 чындыгында бар.
Артка