Jeżeli zastanawiasz się czy numer karty płatniczej jest przypadkową mieszaniną cyfr, to na samym początku musisz porzucić tę tezę. W przypadku branży płatności bezgotówkowych słowo przypadkowy nie istnieje. Płacąc za zakupy w sklepie internetowym, za każdym razem jesteśmy proszeni i podanie danych karty płatniczej. Oczywiście pomijam rozwiązania typu portfel elektroniczny, do którego możemy podpiąć informacje o naszej karcie. Mam na myśli klasyczną płatność kartą w Internecie. W pośpiechu zamieniamy jedną cyfrę i wprowadzony numer karty jest błędny. Pojawia się komunikat informujący o konieczności sprawdzenia numeru. W jaki sposób formularz był w stanie wykryć błąd? Czy istnieje baza danych przechowująca informacje o wszystkich numerach kart wydanych na świecie, z którą sklep internetowy się łączy? Bynajmniej nie działa to w ten sposób! Przeczytaj koniecznie ten artykuł, aby poznać odpowiedź na pytanie w jaki sposób sprawdzić poprawność numeru karty płatniczej wykonując proste działania matematyczne.
Poprawność danych karty płatniczej jest weryfikowana za pomocą algorytmu Luhna. Autorem rozwiązania jest Hans Peter Luhn, przedsiębiorca i inżynier urodzony w Niemczech w 1896 r. – zm. 1964 r. Luhn, po zakończeniu II wojny światowej, wyjechał do Stanów Zjednoczonych, gdzie rozwijał swoją karierę naukową pracując w IBM. Jest autorem rozwiązań technologicznych, które w wyniku dalszego rozwoju, zostały zaadaptowane w wielu dziedzinach. Bez wątpienia Hans Peter Luhn miał swój wkład w rozwój kryptografii, indeksowania danych, ale przede wszystkim jest twórcą algorytmu stosowanego do walidacji numeru karty płatniczej i na tym rozwiązaniu chciałbym skupić swoją uwagę.
Numer karty płatniczej posiada logicznie uszeregowany ciąg cyfr, który możemy podzielić na bloki zawierające odmienne informacje. Pierwsza cyfra numeru karty oznacza branżę, dla której dana karta płatnicza została wydana. Następnie mamy blok z informacją o tzn. numerze BIN (włącznie z pierwszą cyfrą). Kolejny szereg do przedostatniej cyfry numeru karty włącznie, to numer indywidualny. W końcu ostatnia cyfra i jednocześnie ostatni blok informacji, to cyfra kontrolna obliczona na podstawie algorytmu Luhna. Wszystkie bloki łączą się w jeden ciąg cyfr czyli pełny numer karty płatniczej określany jako PAN (ang. primary account number). Więcej na ten temat przeczytasz w moim wpisie na temat poszczególnych elementów karty płatniczej, gdzie w części dotyczącej numeru karty przedstawiam nieco więcej informacji. Wszystkie cyfry łączy pewna zależność, której zrozumienie pozwoli na samodzielne sprawdzenie ich poprawności.
Zasada działania algorytmu Luhna sprowadza się do kilku kroków polegających na zastosowaniu prostych działań matematycznych. W efekcie jesteśmy w stanie podać wartość ostatniej cyfry numeru karty lub po prostu zweryfikować poprawność zapisu całości. Posłużmy się przykładem. Korzystając z dostępnych w Internecie generatorów numeru karty, nasz numer jest następujący: 5168441223630339. Rozpoczynając od ostatniej cyfry i przesuwając się w lewo, podstawiamy mnożniki – odpowiednio 1 i 2 naprzemiennie. Następnie wykonujemy mnożenie poszczególnych cyfr karty z podstawionymi mnożnikami. Poniżej zamieszczam grafikę przedstawiającą opisaną metodę mnożenia naprzemiennego.
W kolejnym kroku sumujemy otrzymane wyniki mając na uwadze jeden wyjątek. Jeżeli iloczyn jest liczbą, wówczas sumujemy ze sobą cyfry tworzące wynik z mnożenia. Dla przykładu, wynik z mnożenia 6 x 2 to liczba 12. W związku z tym wstawiamy znak dodawania pomiędzy cyframi tworzącymi liczbę 12, tj. 1+2=3. Wynikiem z mnożenia nie jest 12, ale będzie to 3. Postępujemy analogicznie z pozostałymi wynikami, jeżeli są liczbą. W końcu sumujemy otrzymane wyniki z wszystkich pozycji w numerze karty. W tym przypadku pozycje od 1 do 16. Grafika poniżej ilustruje działanie.
Jeżeli sumą końcową będzie liczba podzielna przez 10, to oznacza że numer karty jest prawidłowy. W naszym przypadku numer karty pobrany z generatora numerów kart płatniczych online nie zawiera błędów. Dzielenie przez 10 w wykorzystaniem wcześniej opisanych reguł algorytmu Luhna określa się jako działanie mod 10.
Wykorzystując zasadę działania algorytmu Luhna możemy również obliczyć cyfrę kontrolną posiadając wszystkie pozostałe numery karty płatniczej. Schemat działania jest podobny z tą różnicą, że mnożenie naprzemienne rozpoczynamy od przedostatniej cyfry w numerze karty. Suma końcowa nie będzie liczbą podzielną przez 10, dlatego też wynik zaokrąglamy w górę do uzyskania pełnej dziesiątki. Wartość, o którą zaokrągliliśmy otrzymany wynik z dzielenia jest jednocześnie poszukiwaną przez nas cyfrą kontrolną. Ponownie zamieszczam grafikę w celu przedstawienia opisanej sytuacji wykorzystując znany już z poprzednich grafik numer karty płatniczej. Wynik to liczba 51, która nie jest podzielna przez 10. Liczbę zaokrąglamy do pełnej dziesiątki w górę, czyli o 9. Oznacza to, że 9 jest cyfrą kontrolną obliczoną na podstawie algorytmu Luhna.
Algorytm Luhna został przyjęty jako standard do walidacji numeru karty w 1985 roku w wyniku publikacji normy ISO/IEC 7812. Hans Peter Luhn opatentował algorytm 15 lat wcześniej, w 1960 roku. W wyniku upływu lat ochrona patentu wygasła. Oznacza to, że patent znajduje się w domenie publicznej. Warto nadmienić, że algorytm jest stosowany nie tylko do sprawdzania poprawności numeru karty, ale także w zmodyfikowanej wersji umożliwia np. walidację ciągów literowych.
Jeżeli spodobał Ci się ten artykuł, nie zapomnij podzielić się z innymi udostępniając link w mediach społecznościowych.
Zabierz głos w dyskusji