Skip to main content
CheckTown
Walidatory

Walidator kart kredytowych: Jak algorytm Luhna wykrywa nieprawidłowe numery

Opublikowano 6 min czytania
W tym artykule

Czym jest walidacja karty kredytowej?

Walidacja karty kredytowej to proces sprawdzania, czy numer karty jest strukturalnie prawidłowy przed próbą przeprowadzenia transakcji. Obejmuje to weryfikację formatu numeru, zastosowanie algorytmu sumy kontrolnej Luhna i wykrycie sieci karty (Visa, Mastercard, Amex itp.) na podstawie pierwszych cyfr.

Walidacja to nie to samo co autoryzacja. Prawidłowy numer karty oznacza, że format i suma kontrolna są poprawne — nie potwierdza, że karta istnieje, ma środki lub należy do osoby, która jej używa. Prawdziwa autoryzacja wymaga skontaktowania się z wystawcą karty przez sieć płatniczą.

Jak działa algorytm Luhna

Algorytm Luhna (zwany również algorytmem modulo 10) to prosta formuła sumy kontrolnej wynaleziona przez Hansa Petera Luhna w 1954 roku. Wykrywa przypadkowe błędy w numerach kart — przestawione cyfry, błędy pojedynczej cyfry i większość typowych literówek. Oto jak działa krok po kroku.

  • Zaczynając od skrajnej prawej cyfry (cyfra kontrolna), podwój co drugą cyfrę poruszając się w lewo
  • Jeśli podwojenie daje liczbę większą niż 9, odejmij 9 od wyniku (np. 8 x 2 = 16, potem 16 - 9 = 7)
  • Zsumuj wszystkie cyfry — zarówno podwojone/skorygowane, jak i niezmienione
  • Jeśli suma jest podzielna przez 10 (modulo 10 równe 0), numer jest prawidłowy według algorytmu Luhna

Na przykład numer 4532015112830366: po zastosowaniu algorytmu suma cyfr wynosi 40, co jest podzielne przez 10, więc przechodzi kontrolę Luhna. Ten algorytm wykrywa około 95% błędów pojedynczej cyfry i wszystkie błędy transpozycji sąsiednich cyfr.

Wypróbuj za darmo — bez rejestracji

Zwaliduj numer karty kredytowej →

Wykrywanie typu karty po BIN

Numer identyfikacji bankowej (BIN) — pierwsze 6-8 cyfr numeru karty — identyfikuje sieć karty i bank wydający. Każda sieć ma odrębne prefiksy i wymagania dotyczące długości.

  • Visa — zaczyna się od 4, zazwyczaj 16 cyfr (niektóre starsze karty mają 13)
  • Mastercard — zaczyna się od 51-55 lub 2221-2720, zawsze 16 cyfr
  • American Express — zaczyna się od 34 lub 37, zawsze 15 cyfr
  • Discover — zaczyna się od 6011, 65 lub 644-649, zawsze 16 cyfr

Typowe zastosowania

Walidacja kart kredytowych po stronie klienta służy kilku praktycznym celom w aplikacjach webowych i procesach biznesowych.

  • Płatność w e-commerce — walidacja formatu karty przed wysłaniem do procesora płatności w celu zmniejszenia liczby nieudanych transakcji i wywołań API
  • UX formularza płatności — wyświetlanie ikony typu karty (Visa, Mastercard itp.) w czasie rzeczywistym podczas wpisywania i natychmiastowe podświetlanie błędów
  • Zapobieganie oszustwom — wychwytywanie oczywiście nieprawidłowych numerów zanim dotrą do bramki płatniczej, zmniejszając opłaty za przetwarzanie odrzuconych transakcji
  • Generowanie kart testowych — deweloperzy używają numerów testowych prawidłowych według Luhna (takich jak 4111 1111 1111 1111 dla Visa) do testowania przepływów płatności bez prawdziwych kart

Kwestie bezpieczeństwa

Walidacja kart kredytowych to sprawdzenie formatu, a nie środek bezpieczeństwa. Zrozumienie jej ograniczeń jest kluczowe dla budowania bezpiecznych systemów płatności.

  • Walidacja po stronie klienta wykrywa literówki, ale nie może wykryć skradzionych lub anulowanych kart — zawsze przetwarzaj przez bramkę płatniczą zgodną z PCI DSS
  • Nigdy nie przechowuj pełnych numerów kart — korzystaj z usług tokenizacji od dostawcy płatności (Stripe, Braintree, Adyen), aby zastąpić dane karty bezpiecznymi tokenami
  • Zgodność z PCI DSS wymaga, aby dane posiadacza karty nigdy nie trafiały na twoje serwery — używaj hostowanych pól płatniczych lub przepływów opartych na przekierowaniu

Często zadawane pytania

Czy algorytm Luhna może dawać fałszywie pozytywne wyniki?

Tak. Algorytm Luhna waliduje tylko sumę kontrolną — potwierdza, że numer jest matematycznie spójny, a nie że istnieje prawdziwa karta z tym numerem. Można wygenerować nieskończoną liczbę numerów prawidłowych według Luhna, które nie odpowiadają żadnej wydanej karcie. Dlatego walidacja Luhna musi zawsze być poprzedzona rzeczywistą autoryzacją w sieci kart.

Czy numery kart wirtualnych podlegają tym samym regułom?

Tak. Numery kart wirtualnych generowane przez banki i serwisy takie jak Apple Pay, Google Pay czy Privacy.com podlegają tym samym regułom prefiksu BIN i sumy kontrolnej Luhna co karty fizyczne. To prawidłowe numery kart wydane przez te same sieci — jedyna różnica polega na tym, że mogą być tymczasowe, jednorazowe lub ograniczone do konkretnych sprzedawców.

Jakich testowych numerów kart mogę używać do programowania?

Procesory płatności udostępniają konkretne numery testowe: Visa 4111 1111 1111 1111, Mastercard 5500 0000 0000 0004, Amex 3782 822463 10005, Discover 6011 1111 1111 1117. Te numery przechodzą walidację Luhna i są rozpoznawane przez środowiska testowe/sandbox. Nigdy nie używaj prawdziwych numerów kart do testów — nawet podczas programowania używaj wyłącznie oficjalnych numerów testowych od dostawcy płatności.

Powiązane narzędzia