Algorytm Verhoeffa
Algorytm Verhoeffa to formuła sumy kontrolnej do wykrywania błędów , opracowana przez holenderskiego matematyka Jacobusa Verhoeffa i po raz pierwszy opublikowana w 1969 roku. Był to pierwszy dziesiętny algorytm cyfry kontrolnej , który wykrywa wszystkie błędy jednocyfrowe i wszystkie błędy transpozycji obejmujące dwie sąsiednie cyfry, co było wówczas uważane za niemożliwe przy takim kodzie.
Cele
Verhoeff miał na celu znalezienie kodu dziesiętnego - takiego, w którym cyfra kontrolna jest pojedynczą cyfrą dziesiętną - który wykryłby wszystkie błędy jednocyfrowe i wszystkie transpozycje sąsiednich cyfr. W tamtym czasie rzekome dowody na nieistnienie tych kodów sprawiły, że kody base-11 stały się popularne, na przykład w cyfrze kontrolnej ISBN .
Jego cele były również praktyczne i oparł ocenę różnych kodów na aktualnych danych z holenderskiego systemu pocztowego, stosując system punktów ważonych dla różnych rodzajów błędów. Analiza podzieliła błędy na kilka kategorii: po pierwsze, o ile cyfr jest błędnych; dla osób z błędnymi dwiema cyframi istnieją transpozycje ( ab → ba ), bliźniaki ( aa → „bb”), transpozycje skokowe ( abc → cba ), fonetyczne ( 1a → a0 ) i przeskocz bliźniaki ( aba → cbc ). Dodatkowo występują cyfry pominięte i dodane. Chociaż częstość niektórych tego rodzaju błędów może być niewielka, niektóre kody mogą być na nie odporne, oprócz głównego celu wykrywania wszystkich pojedynczych i transpozycji.
W szczególności błędy fonetyczne wykazały skutki językowe, ponieważ w języku niderlandzkim liczby są zwykle czytane parami; a także, chociaż 50 brzmi podobnie do 15 w języku niderlandzkim, 80 nie brzmi jak 18.
Biorąc za przykład liczby sześciocyfrowe, Verhoeff podał następującą klasyfikację błędów:
Błędne cyfry | Klasyfikacja | Liczyć | Częstotliwość |
---|---|---|---|
1 | Transkrypcja | 9574 | 79,05% |
2 | Transpozycje | 1237 | 10,21% |
Bliźnięta | 67 | 0,55% | |
Fonetyczny | 59 | 0,49% | |
Inne obok | 232 | 1,92% | |
Transpozycje skokowe | 99 | 0,82% | |
Skocz bliźniaki | 35 | 0,29% | |
Inne błędy skoku | 43 | 0,36% | |
Inny | 98 | 0,81% | |
3 | 169 | 1,40% | |
4 | 118 | 0,97% | |
5 | 219 | 1,81% | |
6 | 162 | 1,34% | |
Całkowity | 12112 |
Opis
Ogólną ideą algorytmu jest przedstawienie każdej z cyfr (od 0 do 9) jako elementów grupy dwuściennej . Oznacza to, że mapuj cyfry na manipuluj nimi, a następnie mapuj z powrotem na Niech to odwzorowanie będzie
-tą cyfrą będzie niech liczba cyfr będzie .
Na przykład, biorąc pod uwagę kod 248, to wynosi 3 i .
Teraz zdefiniuj permutację
Na przykład . Innym przykładem jest ponieważ
Używając notacji multiplikatywnej dla operacji grupowej , cyfra kontrolna jest wtedy po prostu wartością , że
jest wyraźnie podane przez odwrotną permutację
Na przykład cyfra kontrolna dla 248 to 5. Aby to zweryfikować, użyj odwzorowania na i wstaw do LHS poprzedniego równania
Aby szybko ocenić tę permutację, użyj tego
aby to dostać
To jest to samo odbicie, które jest iteracyjnie mnożone. Użyj tego, że odbicia są ich odwrotnością.
W praktyce algorytm jest implementowany przy użyciu prostych tabel przeglądowych bez konieczności rozumienia, jak generować te tabele z podstawowej teorii grup i permutacji. Jest to bardziej właściwie uważane za rodzinę algorytmów, ponieważ działają również inne permutacje. Verhoeff zauważa, że szczególna permutacja podana powyżej jest wyjątkowa, ponieważ ma właściwość wykrywania 95,3% błędów fonetycznych.
Mocną stroną algorytmu jest to, że wykrywa wszystkie błędy transliteracji i transpozycji, a dodatkowo większość błędów bliźniaczych, podwójnych przeskoków, przeskoków transpozycji i błędów fonetycznych.
Główną słabością algorytmu Verhoeffa jest jego złożoność. Wymaganych obliczeń nie można łatwo wyrazić w postaci wzoru, powiedzmy. } Tabele przeglądowe są wymagane do łatwego obliczania. Podobnym kodem jest algorytm Damma , który ma podobne cechy.
Algorytm oparty na tabelach
Algorytm Verhoeffa można zaimplementować za pomocą trzech tablic: tabliczki mnożenia d , tablicy odwrotnej inv i tablicy permutacji p .
|
|
|
Pierwsza tabela, d , jest oparta na mnożeniu w grupie dwuściennej D5 . i jest po prostu tabelą Cayleya grupy. Zauważ, że ta grupa nie jest przemienna , to znaczy dla niektórych wartości j i k , d ( j , k ) ≠ d ( k , j ).
Tablica odwrotna inv reprezentuje multiplikatywną odwrotność cyfry, czyli wartość, która spełnia d ( j , inv ( j )) = 0.
Tabela permutacji p stosuje permutację do każdej cyfry na podstawie jej pozycji w liczbie. W rzeczywistości jest to pojedyncza permutacja (1 5 8 9 4 2 7 0)(3 6) stosowana iteracyjnie; tj. p ( ja + jot , n ) = p ( ja , p ( jot , n )).
Obliczenie sumy kontrolnej Verhoeffa odbywa się w następujący sposób:
- 0 Utwórz tablicę n z poszczególnych cyfr liczby, pobranych od prawej do lewej (cyfra najbardziej po prawej to n itd.).
- Zainicjuj sumę kontrolną c na zero.
- Dla każdego indeksu i tablicy n, zaczynając od zera, zamień ( ja .
Oryginalny numer jest ważny wtedy i tylko wtedy, gdy .
0 Aby wygenerować cyfrę kontrolną, dołącz a , wykonaj obliczenia: poprawna cyfra kontrolna to .
Przykłady
Wygeneruj cyfrę kontrolną dla 236 :
c wynosi 2, więc cyfrą kontrolną jest inv (2), czyli 3. |
Zatwierdź cyfrę kontrolną 2363 :
c wynosi zero, więc sprawdzenie jest poprawne. |