Algorytm LuhnaAlgorytm Luhna lub metoda Luhna, znany również jako algorytm „modulus 10” lub „mod 10”, nazwany na cześć jego twórcy, naukowca IBM Hansa Petera Luhna, jest prostą formułą sumy kontrolnej używaną do walidacji różnych numerów identyfikacyjnych, takich jak numery kart kredytowych, numery IMEI, numery identyfikatorów krajowych dostawców w Stanach Zjednoczonych, kanadyjskie numery ubezpieczenia społecznego, izraelskie numery identyfikacyjne, greckie numery ubezpieczenia społecznego oraz Survey Code (pierwsze 20 cyfr) pojawiające się na paragonach w amerykańskim McDonald's, Taco Bell i Tractor Supply Co. Metoda jest opisana w patencie USA nr 2,950,048, złożonym 6 stycznia 1954 r. i udzielonym 23 sierpnia 1960 r. Algorytm znajduje się w domenie publicznej i jest obecnie powszechnie używany. Jest on określony w normie ISO/IEC 7812-1. Nie jest to kryptograficznie bezpieczna funkcja mieszania; został zaprojektowany w celu ochrony przed przypadkowymi błędami, a nie złośliwymi atakami. Jest prostą metodą rozróżniania prawidłowych numerów od błędnie wpisanych. Numery takie mają następującą strukturę XXXXXXXC, gdzie XXXXXXX to numer identyfikacyjny (o dowolnej liczbie cyfr), a C to cyfra kontrolna. Prosty algorytm LuhnaAlgorytm sprawdzania poprawności ciągu cyfr liczby zabezpieczonego tą metodą przebiega następująco:
Rozszerzony algorytm LuhnaRozszerzenie algorytmu Luhna polega na umożliwieniu użycia algorytmu do identyfikatorów alfanumerycznych czyli cyfr od 0 do 9 i liter od A do Z. Literom od A do Z przydziela się wartości liczbowe od 10 do 36. Tak więc identyfkator ABCD1234 zamienia się na 10 11 12 13 1 2 3 4. Do tego ciągu 101112131234 stosuje się prosty algorytm Luhna. Algorytm obliczenia nieznanej cyfry kontrolnej jest łatwy gdy robi się obliczenia na papierze.
Aby suma cyfr była podzielna bez reszty przez 10, to cyfra kontrolna Ck musi wynosić 8, co daje pełny numer np. konta 499276558. Sprawdzenie poprawności numeru wykonujemy podobnie:
Ponieważ reszta z dzielenia 50 przez 10 wynosi zero, więc sprawdzany numer jest prawidłowy. Prawidłowy w sensie zgodności cyfry kontrolnej. Algorytm ten wykrywa każdy błąd pojedynczej cyfry, jak również większość zamian sąsiednich cyfr - tzw. czeski błąd - jeżeli ktoś przepisując kod wpisał 12 zamiast 21. Nie wykrywa jednak jednego czeskiego błędu - zamiany cyfr 09 z 90 (i na odwrót). Uwagi do implementacji algorytmuNa papierze wyglądo prosto ale gdy chcemy to zapisać jako algorytm programu
komputerowego to wymaga to troche pomyślunku - jak zawsze w programowaniu :-) Wartośc cyfry mnożonej przez dwa jest indeksem do wektora. Przykłady realizacji algorytmu |
|
|
|
(serwis działa od stycznia 2001) |