W matematyce, a dokładniej w arytmetyce modularnej , wzór Luhna jest używany do jego zastosowań w kryptologii . Algorytm Luhna lub kod Luhna lub wzór Luhna jest również znany jako algorytm „ modulo 10” lub „10” mod. Jest to prosta formuła sumy kontrolnej (suma kontrolna) służąca do walidacji różnych numerów kont, takich jak numery kart kredytowych, numery ubezpieczenia społecznego, kanadyjskie , numery IMEI telefonów komórkowych, a także do obliczania ważności numeru SIRET .
Został opracowany w latach 60. XX wieku przez niemieckiego inżyniera z IBM , Hansa Petera Luhna , jako metoda weryfikacji numeru identyfikacyjnego. Jego rozgłos wynika głównie z przyjęcia go przez firmy obsługujące karty kredytowe wkrótce po jego powstaniu.
Algorytm jest w domenie publicznej i jest dziś szeroko stosowany. Nie został zaprojektowany jako kryptologicznie bezpieczna funkcja mieszająca ; chroni przed przypadkowymi błędami, a nie przed złośliwymi atakami. Większość kart kredytowych i wiele rządowych numerów identyfikacyjnych wykorzystuje algorytm jako prostą metodę odróżniania prawidłowych liczb od zbiorów liczb losowych.
Formuła generuje cyfrę kontrolną, która jest zwykle dołączana do częściowego numeru identyfikacyjnego w celu wygenerowania pełnego identyfikatora. Identyfikator ten (pełny numer: częściowy numer i jego cyfra kontrolna) poddawany jest następującemu algorytmowi weryfikacji jego ważności:
Aby określić cyfrę kontrolną dodaną na końcu numeru:
Przykład:
Algorytm przebiega w trzech krokach.
Rozważ identyfikację numeru 972-487-086. Pierwszy etap polega na podwojeniu co drugą cyfrę z przedostatnim do początku i dodając wszystkie cyfry, podwoiła się, czy nie (jeśli cyfra jest większa niż 9, odejmiemy 9, d, gdzie 3 th linia). Poniższa tabela przedstawia ten krok (kolorowe linie oznaczają podwójne cyfry):
Postać | Suma | ||||||||
---|---|---|---|---|---|---|---|---|---|
9 | 7 | 2 | 4 | 8 | 7 | 0 | 8 | 6 | |
9 | 14 | 2 | 8 | 8 | 14 | 0 | 16 | 6 | |
9 | 5 | 2 | 8 | 8 | 5 | 0 | 7 | 6 | 50 |
Suma równa 50 jest dzielona przez 10: reszta to 0, więc liczba jest ważna.
Jeśli dwie cyfry zostaną przypadkowo zamienione, kod Luhna stanie się niepoprawny (chyba że te dwie cyfry to 0 i 9):
Postać | Suma | ||||||||
---|---|---|---|---|---|---|---|---|---|
9 | 2 | 7 | 4 | 8 | 7 | 0 | 8 | 6 | |
9 | 4 | 7 | 8 | 8 | 14 | 0 | 16 | 6 | |
9 | 4 | 7 | 8 | 8 | 5 | 0 | 7 | 6 | 54 |
Suma nie jest podzielna przez 10, więc liczba jest nieważna.
We Francji liczba zakładów La Poste SIRET nie jest zgodna z algorytmem Luhna. Stanowisko zmieniło status w 2010 roku, stając się spółką akcyjną . Wszystkie placówki La Poste mają ten sam numer SIREN „356.000.000”. Ponieważ La Poste ma wiele placówek, a zakres możliwych numerów SIRET nie jest wystarczająco szeroki, zmodyfikowano zasadę sprawdzania numeru SIRET dla tej firmy. Podczas kontroli należy zastosować kontrolę klasyczną, następnie jeśli klasyczna zasada nie jest sprawdzona, sprawdź, czy prosta suma liczb SIRET jest wielokrotnością pięciu (oficjalna odpowiedź INSEE) (np. dla centrali La Poste numer SIRET to 35600000000048. Sprawdza klasyczną formułę, ale nie inną regułę; w przypadku ustanowienia Rennes o numerze SIRET 356 000 539 14285, klasyczna reguła to KO, sprawdzenie z drugą regułą jest ważne).
W Belgii (przed zastosowaniem standardu SEPA, który dodaje „BE” i dwie cyfry na początku) numery kont bankowych weryfikowane są prostą operacją MODULO 97, co oznacza, że dwie ostatnie cyfry to reszta podziału przez 97 pozostałych cyfr. Dotyczy to również tak zwanej komunikacji „ustrukturyzowanej” (12 cyfr) w przypadku przelewów międzybankowych.