Hoe checksumwaarden werken
Kaartnummers, IBAN-nummers, fiscale identificatienummers en cryptoadressen bevatten allemaal één of twee verborgen extra cijfers die uit de andere cijfers worden berekend. Typ één teken verkeerd en de rekensom klopt niet meer – zo kan een validator een typefout onmiddellijk offline opsporen, zonder een bank of blockchain te raadplegen.
Wat een checksum is
Een checksum (of controlecijfer) is opzettelijke redundantie. Wanneer een nummer wordt uitgegeven, worden één of meerdere van zijn cijfers niet willekeurig gekozen: ze worden uit de rest berekend volgens een vaste formule. Iedereen die de formule kent, kan later die cijfers opnieuw berekenen en vergelijken. Als ze overeenkomen, is het nummer intern consistent. Zo niet, dan is er een typefout gemaakt, is het verkeerd gelezen of is het beschadigd.
Dat is alles wat een checksum belooft. Het zegt niets over het bestaan van het account, wie de eigenaar is of wat erin zit – een punt dat elke validator op deze site benadrukt, omdat de twee gemakkelijk met elkaar worden verward.
Voorbeeld 1 – Luhn, het algoritme voor kaartnummers
Visa, Mastercard en de meeste andere betaalkaarten gebruiken Luhn. Neem het klassieke voorbeeld 7992 7398 713. Begin bij het rechterste cijfer en verdubbel elk tweede cijfer; als het verdubbelen een twee-cijferig getal oplevert, tel de cijfers van dat getal bij elkaar op. Som dan alles bij elkaar.
| Cijfer | Positie van rechts | Dubbel? | Telt als |
|---|---|---|---|
3 | Controlecijfer | — | 3 |
1 | De 2e van rechts | 1 × 2 = 2 | 2 |
7 | De 3e | — | 7 |
8 | De 4e | 8 × 2 = 16 → 1 + 6 | 7 |
9 | De 5e | — | 9 |
3 | De 6e | 3 × 2 = 6 | 6 |
7 | De 7e | — | 7 |
2 | De 8e | 2 × 2 = 4 | 4 |
9 | De 9e | — | 9 |
9 | De 10e | 9 × 2 = 18 → 1 + 8 | 9 |
7 | 11e | — | 7 |
De kolom rechts opgeteld geeft 3 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 7 = 70. Zeventig is deelbaar door tien, dus het nummer is geldig. Verander één enkel cijfer en het totaal is niet langer een veelvoud van tien. Probeer het uit op de Creditcard validator – deze voert precies deze berekening uit op jouw apparaat.
Voorbeeld 2 – een gewogen som (ISBN-10)
Veel nationale identificatienummers gebruiken een gewogen som: vermenigvuldig elk cijfer met een vaste gewicht, tel ze bij elkaar op en controleer de rest. ISBN-10 is het duidelijkste voorbeeld. Voor 0-306-40615-2 lopen de gewichten van 10 tot 1:
0×10 + 3×9 + 0×8 + 6×7 + 4×6 + 0×5 + 6×4 + 1×3 + 5×2 + 2×1 = 132
132 is precies 11 × 12, dus de rest bij deling door 11 is nul en het ISBN is geldig. Het Braziliaanse CPF, het Poolse PESEL en tientallen andere identificatoren volgen hetzelfde patroon met hun eigen gewichten en modulus – daarom kan één ID-batchvalidator duizenden van zulke nummers in één seconde controleren.
Voorbeeld 3 – IBAN en mod 97
Internationale bankrekeningnummers gebruiken ISO 7064 mod 97-10, een robuuster systeem met twee controlecijfers. Neem het standaardvoorbeeld GB82 WEST 1234 5698 7654 32:
- Controleer de lengte voor het land: een Brits IBAN bestaat uit 22 tekens. ✓
- Verplaats de eerste vier tekens naar het einde:
WEST12345698765432GB82. - Vervang elke letter door twee cijfers (A = 10 … Z = 35): W→32, E→14, S→28, T→29, G→16, B→11, waardoor je
3214282912345698765432161182krijgt. - Dividéer dat getal door 97. De rest moet precies 1 zijn – en dat is ook zo.
Omdat 97 een priemgetal is en groter dan elke wisseling van twee cijfers, vangt mod 97 elke fout van één teken en elke verplaatsing op; slechts ongeveer één willekeurige reeks op de 97 zal toevallig door de controle komen. De IBAN-validator laat zien of elke van deze stappen slaagt of faalt.
Crypto-adressen: controlegetallen die zijn opgebouwd uit hashes
Bitcoin- en Ethereum-adressen stellen hoge eisen, want een typefout stuurt geld permanent naar niemand. Oudere Bitcoin-adressen (1…, 3…) maken gebruik van Base58Check: de adresgegevens worden tweemaal door SHA-256 gehaald en de eerste vier bytes van het resultaat worden als controlegetal toegevoegd. Één verkeerd teken verandert de hash volledig, waardoor de kans dat een typefout door de mazen heen glipt ongeveer één op vier miljard is. Nieuwere bc1…-adressen gebruiken Bech32 van Bech32m, een foutcorrigerende code die garandeert dat elke fout die tot vier tekens beïnvloedt wordt gedetecteerd. Bij Ethereum wordt het controlegetal via EIP-55 verborgen in het patroon van hoofd- en kleine letters.
De Bitcoin-adresvalidator en Ethereum-adresvalidator passen deze algoritmen in de browser toe en vergelijken zichzelf bij elke paginalading met de officiële testvectoren.
Overzicht van schema's
| Schema | Gebruikt door | Vangt op | Kans dat een willekeurige fout doorheen glipt |
|---|---|---|---|
| Luhn (mod 10) | Credit- en debetkaarten, IMEI, veel nationale identiteitsdocumenten | Elke fout met één cijfer en de meeste opeenvolgende verwisselingen | Ongeveer 1 op 10 |
| ISO 7064 mod 97-10 | IBAN en sommige belasting- en bedrijfsnummers | Elke afzonderlijke fout en elke verwisseling | Ongeveer 1 op de 97 |
| Gewogen som, mod 10 of 11 | ISBN-10, Brazil CPF, Poolse PESEL en vele identificatienummers | Enkele fouten en de meeste verwisselingen | Ongeveer 1 op de 10 of 1 op de 11 |
| Base58Check (dubbele SHA-256, 4 bytes) | Oude Bitcoin-adressen (1…, 3…) | Elke typefout wordt met grote waarschijnlijkheid gedetecteerd | Ongeveer 1 op de 4 miljard |
| Bech32 / Bech32m (BCH-code) | Bitcoin SegWit- en Taproot-adressen (bc1…) | Gegarandeerd: elke fout beïnvloedt maximaal 4 tekens. | Minder dan 1 op een miljard. |
| EIP-55 (keccak-256-casing) | Ethereum-adressen | Typfouten, door het patroon van hoofd- en kleine letters. | Zeer laag bij invoer met gemengde hoofd- en kleine letters. |
Waarom een validator op je apparaat moet draaien
Alles hierboven is rekenkundig werk met cijfers die je al hebt. Er is geen reden voor een validator om een kaartnummer, fiscaal identificatienummer of walletadres naar een server te sturen – en er zijn juist goede redenen om dat niet te doen. Elke validator op deze site draait lokaal; de lijst met offline tools groepeert ze, en onze gids om te controleren of een tool je gegevens uploadt laat zien hoe je dat binnen twintig seconden voor elke site kunt bevestigen.
FAQ
Betekent een geldige checksum dat het nummer echt of actief is?
Nee. Een checksum bewijst alleen dat de cijfers intern consistent zijn – dat het nummer zou kunnen bestaan. Het kan je niet vertellen of het account geopend is, wie de eigenaar is of wat het saldo is. Elke validator op deze site vermeldt dit op de pagina, omdat dat onderscheid belangrijk is.
Hoe groot is de kans dat een foutief nummer toch door de controle komt?
Het hangt af van het systeem. Eén mod-10 controlecijfer laat ongeveer 1 willekeurige fout per 10 toe; de mod 97 van IBAN laat ongeveer 1 op de 97 toe; een Base58Check-checksum van 4 bytes laat ongeveer 1 op de 4 miljard door. De belangrijke eigenschap is dat alle gangbare menselijke fouten – één verkeerd cijfer, twee verwisselde cijfers – door alle systemen worden opgemerkt.
Waarom hebben sommige identificatoren helemaal geen checksum?
Oudere of eenvoudigere systemen zijn ontworpen om in een register te worden opgezocht in plaats van offline te worden gecontroleerd, en sommige nummeringssystemen zijn simpelweg ontstaan vóór deze praktijk. Voor die systemen kan een validator alleen de lengte en het formaat controleren.
Is het veilig om mijn kaart- of identiteitsnummer in een validator te plakken?
Alleen als de validatie op je eigen apparaat wordt uitgevoerd. Een checksum is een rekenkundige bewerking op cijfers die je al hebt, dus er is geen legitieme reden voor een validator om ze naar een server te sturen. Je kunt bevestigen of een tool lokaal werkt met de proef in vliegtuigmodus die wordt beschreven in onze gids voor het controleren of een tool je gegevens uploadt.
Wat is het verschil tussen een checksum, een hash en encryptie?
Een checksum is een kort controlecijfer bedoeld om toevallige typefouten op te sporen. Een cryptografische hash is een lange 'vingerafdruk' waarbij zelfs een opzettelijke wijziging wordt gedetecteerd en het origineel niet kan worden hersteld. Encryptie transformeert gegevens zodat ze alleen met een sleutel kunnen worden gelezen. Base58Check gebruikt een hash om zijn checksum te genereren, waardoor het zo moeilijk is om per ongeluk te misleiden.