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$$ 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 чындыгында бар.
Артка