Z tego co przeczytałem, algorytm jakoś tak przebiega:
"
Weryfikacja składa się z następujących kroków:
krok wstępny : usuń niealfanumeryczne znaki - np. spacje, myślniki itd, dodaj na początku jeśli nie ma PL.
krok 1 : przesuń 4 pierwsze znaki na koniec,
krok 2 : zamień litery na dwucyfrowe liczby; A=10, B=11, ... Y=34, Z=35
krok 3 : podziel całkowicie liczbę powstałą w kroku 2 przez 97,
krok 4 : jeśli reszta z dzielenia wyniosła 1 to numer IBAN jest prawidłowy.
"
czyli dzieliliśmy przez 97 liczby
1020 0029 9000 2006 1432 8257 2521 07 - oryginalny numer
i
1020 0029 9000 0200 6143 8257 2521 07 - pomylony numer
Zakładamy, że użytkownik myli się tylko na ośmiu wytłuszczonych miejscach, myli się w dowolny sposób, a nie przesuwając ramkę.
By policzyć prawdopodobieństwo takiej pomyłki, w wyniku której otrzymamy poprawny numer, liczymy:
20061432 mod 97 = 86
Trzeba policzyć jakie jest prawdopodobieństwo wylosowania liczby z zakresu od 0 do 10^8 dającej 86 jako resztę z dzielenia przez 97. (na podstawie pierścienia ilorazowego klas reszt modulo n)
10^8 = 1030926*97+86 + 92
czyli: p = 1030927/100000000 = 0,01030927
Jest to bardzo małe prawdopodobieństwo, czy dobrze to policzyłem ?
Oczywiście do pomyłki doszło inaczej, koleżanka przesunęła ramkę, a ostatnią cyfrę 8-cyfrowego podciągu ucięła, ostatnie 4 cyfry numeru konta są widoczne, rzucają się w oczy, więc nie dziwi mnie mechanizm powstania takiego błędu. Prawdę powiedziawszy nie mam pomysłu jak policzyć takie prawdopodobieństwo, poza metodą brutalną wyznaczenia mocy zbioru zdarzeń sprzyjających. Nie umiem nawet sobie wyobrazić, czy będzie ono większe niż zupełnie losowa liczba 8-cyfrowa, czy mniejsze. Choć skoro do niej doszło, to przesunięcie ramki powinno łatwiej prowadzić do poprawnego numeru niż owe 0,0103.....
"
Weryfikacja składa się z następujących kroków:
krok wstępny : usuń niealfanumeryczne znaki - np. spacje, myślniki itd, dodaj na początku jeśli nie ma PL.
krok 1 : przesuń 4 pierwsze znaki na koniec,
krok 2 : zamień litery na dwucyfrowe liczby; A=10, B=11, ... Y=34, Z=35
krok 3 : podziel całkowicie liczbę powstałą w kroku 2 przez 97,
krok 4 : jeśli reszta z dzielenia wyniosła 1 to numer IBAN jest prawidłowy.
"
czyli dzieliliśmy przez 97 liczby
1020 0029 9000 2006 1432 8257 2521 07 - oryginalny numer
i
1020 0029 9000 0200 6143 8257 2521 07 - pomylony numer
Zakładamy, że użytkownik myli się tylko na ośmiu wytłuszczonych miejscach, myli się w dowolny sposób, a nie przesuwając ramkę.
By policzyć prawdopodobieństwo takiej pomyłki, w wyniku której otrzymamy poprawny numer, liczymy:
20061432 mod 97 = 86
Trzeba policzyć jakie jest prawdopodobieństwo wylosowania liczby z zakresu od 0 do 10^8 dającej 86 jako resztę z dzielenia przez 97. (na podstawie pierścienia ilorazowego klas reszt modulo n)
10^8 = 1030926*97+86 + 92
czyli: p = 1030927/100000000 = 0,01030927
Jest to bardzo małe prawdopodobieństwo, czy dobrze to policzyłem ?
Oczywiście do pomyłki doszło inaczej, koleżanka przesunęła ramkę, a ostatnią cyfrę 8-cyfrowego podciągu ucięła, ostatnie 4 cyfry numeru konta są widoczne, rzucają się w oczy, więc nie dziwi mnie mechanizm powstania takiego błędu. Prawdę powiedziawszy nie mam pomysłu jak policzyć takie prawdopodobieństwo, poza metodą brutalną wyznaczenia mocy zbioru zdarzeń sprzyjających. Nie umiem nawet sobie wyobrazić, czy będzie ono większe niż zupełnie losowa liczba 8-cyfrowa, czy mniejsze. Choć skoro do niej doszło, to przesunięcie ramki powinno łatwiej prowadzić do poprawnego numeru niż owe 0,0103.....
