Jak działają sumy kontrolne
Numery kart, IBAN-y, numery identyfikacyjne podatników i adresy kryptowalutowe zawierają ukrytą dodatkową cyfrę lub dwie, obliczone na podstawie pozostałych cyfr. Wpisanie jednej błędnej cyfry sprawia, że wynik obliczeń się nie zgadza – dzięki temu walidator może natychmiast wykryć literówkę, offline, bez konieczności kontaktowania się z bankiem czy siecią blockchain.
Czym jest suma kontrolna
Suma kontrolna (lub cyfra kontrolna) to celowa redundancja. Gdy liczba jest wydawana, jedna lub więcej jej cyfr nie jest wybierana losowo: są one obliczane na podstawie pozostałych według ustalonej reguły. Każdy, kto zna tę regułę, może później ponownie obliczyć te cyfry i je porównać. Jeśli się zgadzają, liczba jest wewnętrznie spójna. Jeśli nie – coś zostało wpisane błędnie, źle odczytane lub uległo uszkodzeniu.
To wszystko, co obiecuje suma kontrolna. Nie mówi nic o tym, czy konto istnieje, kto jest jego właścicielem ani co w nim się znajduje – co powtarza każdy walidator na tej stronie, ponieważ te dwa pojęcia łatwo ze sobą pomylić.
Przykład obliczeniowy 1 – Luhn, algorytm numerów kart
Algorytm Luhn jest stosowany przez Visa, Mastercard i większość innych kart płatniczych. Weź klasyczny przykład 7992 7398 713. Zaczynając od najprawiejszej cyfry, podwój każdą drugą cyfrę; jeśli wynik podwojenia to liczba dwucyfrowa, dodaj jej cyfry do siebie. Następnie zsumuj wszystko.
| Cyfra | Pozycja od prawej | Podwojone? | Liczy się jako |
|---|---|---|---|
3 | Cyfra kontrolna | — | 3 |
1 | Druga od prawej | 1 × 2 = 2 | 2 |
7 | Trzecia | — | 7 |
8 | Czwarta | 8 × 2 = 16 → 1 + 6 | 7 |
9 | Piąta | — | 9 |
3 | Szósta | 3 × 2 = 6 | 6 |
7 | Siódma | — | 7 |
2 | Ósma | 2 × 2 = 4 | 4 |
9 | Dziewiąta | — | 9 |
9 | Dziesiąta | 9 × 2 = 18 → 1 + 8 | 9 |
7 | 11. | — | 7 |
Kolumna po prawej stronie daje w sumie 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70. Siedemdziesiąt jest podzielne przez dziesięć, więc numer jest poprawny. Zmiana dowolnej cyfry sprawia, że suma przestaje być wielokrotnością dziesięciu. Spróbuj tego na Walidator kart kredytowych – narzędzie wykonuje te dokładnie obliczenia na Twoim urządzeniu.
Przykład obliczeń 2 – suma ważona (ISBN-10)
Wiele numerów dowodów tożsamości narodowych wykorzystuje sumę ważoną: należy pomnożyć każdą cyfrę przez określoną wagę, zsumować wyniki i sprawdzić resztę z dzielenia. ISBN-10 jest najlepszym przykładem. Dla numeru 0-306-40615-2 wagi wynoszą od 10 do 1:
0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132
132 jest dokładnie równe 11 × 12, więc reszta z dzielenia przez 11 wynosi zero i numer ISBN jest poprawny. Brazylijski numer CPF, polski numer PESEL oraz dziesiątki innych identyfikatorów wykorzystują ten sam schemat z własnymi wagami i modułem – dlatego jeden Wsadowy walidator ID może zweryfikować tysiące takich numerów w ciągu sekundy.
Przykład obliczeń 3 – IBAN i moduł 97
Międzynarodowe numery rachunków bankowych wykorzystują standard ISO 7064 mod 97-10 – bardziej wytrzymały schemat z dwoma cyframi kontrolnymi. Przyjmijmy standardowy przykład GB82 WEST 1234 5698 7654 32:
- Sprawdź długość numeru pod kątem kraju: brytyjski numer IBAN ma 22 znaki. ✓
- Przenieś pierwsze cztery znaki na koniec:
WEST12345698765432GB82. - Zastąp każdą literę dwiema cyframi (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11, co daje
3214282912345698765432161182. - Podziel tę liczbę przez 97. Reszta musi wynosić dokładnie 1 – i tak właśnie jest.
Ponieważ 97 jest liczbą pierwszą i większą od dowolnej zamiany dwóch cyfr, moduł 97 wykrywa każdy błąd pojedynczej cyfry oraz każdą transpozycję; jedynie około jeden losowy ciąg znaków na 97 przejdzie przez test przypadkowo. Walidator IBAN pokazuje, które z tych warstw przechodzą test, a które nie.
Adresy kryptograficzne: sumy kontrolne utworzone na podstawie skrótów.
Adresy Bitcoin i Ethereum stawiają wysoką poprzeczkę – literówka w nich powoduje trwałe wysłanie środków do nikogo. Starsze adresy Bitcoin (1…, 3…) wykorzystują Base58Check: zawartość adresu jest przetwarzana przez SHA-256 dwukrotnie, a pierwsze cztery bajty wyniku są dodawane jako suma kontrolna. Jeden nieprawidłowy znak całkowicie zmienia skrót, więc szansa na prześlizgnięcie się literówki wynosi około jeden do czterech miliardów. Nowsze adresy bc1… używają Bech32 lub Bech32m – kodu korygującego błędy, który gwarantuje wykrycie każdego błędu dotyczącego maksymalnie czterech znaków. W standardzie EIP-55 Ethereum suma kontrolna jest ukryta w układzie wielkich i małych liter.
Narzędzie Walidator adresów Bitcoin oraz Walidator adresów Ethereum implementują te algorytmy w przeglądarce i przy każdym załadowaniu strony weryfikują je względem oficjalnych wektorów testowych.
Przegląd schematów
| Schemat | Wykorzystywane przez | Wykrywa | Szansa na prześlizgnięcie się losowego błędu |
|---|---|---|---|
| Luhn (mod 10) | Karty kredytowe i debetowe, IMEI, wiele numerów identyfikacyjnych narodowych | Każdy błąd pojedynczej cyfry oraz większość przypadków zamian sąsiednich znaków | Około 1 na 10 |
| ISO 7064 mod 97-10 | IBAN oraz niektóre numery podatkowe i firmowe | Każdy pojedynczy błąd i każda transpozycja | Około 1 na 97 |
| Suma ważona, mod 10 lub 11 | ISBN-10, brazylijski numer CPF, polski numer PESEL oraz wiele innych identyfikatorów | Pojedyncze błędy i większość transpozycji | Około 1 na 10 lub 1 na 11 |
| Base58Check (podwójne SHA-256, 4 bajty) | Starsze adresy Bitcoin (1…, 3…) | Każdy błąd pisowni z ogromnym prawdopodobieństwem | Około 1 na 4 miliardy |
| Bech32 / Bech32m (kod BCH) | Adresy Bitcoin SegWit i Taproot (bc1…) | Gwarantowane: każdy błąd dotyczy maksymalnie 4 znaków | Poniżej 1 na miliard |
| EIP-55 (obsługa wielkości liter keccak-256) | Adresy Ethereum | Błędy pisowni wynikające ze wzorca wielkich i małych liter | Bardzo niskie dla danych wprowadzonych z mieszanką wielkich i małych liter |
Dlaczego walidator powinien działać na Twoim urządzeniu
Wszystko powyżej to operacje arytmetyczne na cyfrach, które już posiadasz. Nie ma powodu, aby walidator wysyłał numer karty, identyfikator podatkowy czy adres portfela na serwer – i jest bardzo dobry powód, by tego nie robić. Każdy walidator na tej stronie działa lokalnie; lista narzędzi offline je grupuje, a nasz przewodnik po sprawdzaniu, czy narzędzie przesyła Twoje dane pokazuje, jak to potwierdzić dla dowolnej strony w dwadzieścia sekund.
FAQ
Czy prawidłowa suma kontrolna oznacza, że numer jest rzeczywisty lub aktywny?
Nie. Suma kontrolna jedynie potwierdza, że cyfry są wewnętrznie spójne – że numer może istnieć. Nie może powiedzieć Ci, czy konto jest otwarte, kto je posiada ani jaki jest jego saldo. Każdy walidator na tej stronie podaje to na swojej stronie, ponieważ ta różnica ma znaczenie.
Jakie jest prawdopodobieństwo, że błędny numer i tak przejdzie walidację?
Zależy to od schematu. Pojedynczy cyfra kontrolna typu mod-10 pozwala na przepuszczenie około 1 losowego błędu na 10; mod 97 w standardzie IBAN pozwala na przepuszczenie około 1 błędu na 97; 4-bajtowa suma kontrolna Base58Check pozwala na przepuszczenie około 1 błędu na 4 miliardy. Ważną właściwością jest to, że wszystkie te schematy wykrywają powszechne błędy ludzkie – jeden błędny cyfr lub dwie przestawione cyfry.
Dlaczego niektóre identyfikatory w ogóle nie mają sumy kontrolnej?
Starsze lub prostsze schematy zostały zaprojektowane do wyszukiwania w rejestrze, a nie do sprawdzania offline, a niektóre systemy numeracji po prostu powstały przed wprowadzeniem tej praktyki. W przypadku tych systemów walidator może sprawdzać jedynie długość i format.
Czy bezpiecznie jest wklejać numer karty lub dowodu osobistego do walidatora?
Tylko wtedy, gdy walidacja odbywa się na Twoim urządzeniu. Suma kontrolna to operacja arytmetyczna na cyfrach, które już posiadasz, więc nie ma uzasadnionego powodu, aby walidator wysyłał je na serwer. Możesz potwierdzić, że narzędzie działa lokalnie, wykonując test w trybie samolotowym opisany w naszym przewodniku dotyczącym sprawdzania, czy narzędzie przesyła Twoje dane.
Jaka jest różnica między sumą kontrolną, skrótem haszującym a szyfrowaniem?
Suma kontrolna to krótka cyfra kontrolna zaprojektowana do wykrywania przypadkowych błędów typograficznych. Skrót haszujący to długi „odcisk palca” zaprojektowany tak, aby nawet celowa zmiana była wykrywalna, a oryginału nie można było odtworzyć. Szyfrowanie przekształca dane tak, aby można je było odczytać tylko za pomocą klucza. Base58Check wykorzystuje skrót haszujący do utworzenia swojej sumy kontrolnej, dlatego tak trudno jest ją oszukać przypadkowo.