Skip to content

CRC-calculator: checksum berekenen en herkennen

Plak hex of tekst en bereken in één keer alle 63 CRC-8-, CRC-16- en CRC-32-varianten. Checksum die niet klopt? Vul hem in en de tool benoemt de variant: MODBUS, CCITT-FALSE, XMODEM, KERMIT. Alles draait in je browser.

Geen tracking Draait in je browser Gratis
Alles draait lokaal in je browser — de data die je plakt verlaat dit apparaat niet.
Probeer deze

Alle 63 varianten

Elke rij wordt opnieuw berekend terwijl je typt.
Variant Resultaat Poly Init RefIn/RefOut XorOut
CRC-8
CRC-8/AUTOSAR 0x2F 0xFF false / false 0xFF
CRC-8/BLUETOOTH 0xA7 0x00 true / true 0x00
CRC-8/CDMA2000 0x9B 0xFF false / false 0x00
CRC-8/DARC 0x39 0x00 true / true 0x00
CRC-8/DVB-S2 0xD5 0x00 false / false 0x00
CRC-8/GSM-A 0x1D 0x00 false / false 0x00
CRC-8/GSM-B 0x49 0x00 false / false 0xFF
CRC-8/HITAG 0x1D 0xFF false / false 0x00
CRC-8/I-432-1 CRC-8/ITU 0x07 0x00 false / false 0x55
CRC-8/I-CODE 0x1D 0xFD false / false 0x00
CRC-8/LTE 0x9B 0x00 false / false 0x00
CRC-8/MAXIM-DOW CRC-8/MAXIM · DOW-CRC 0x31 0x00 true / true 0x00
CRC-8/MIFARE-MAD 0x1D 0xC7 false / false 0x00
CRC-8/NRSC-5 0x31 0xFF false / false 0x00
CRC-8/OPENSAFETY 0x2F 0x00 false / false 0x00
CRC-8/ROHC 0x07 0xFF true / true 0x00
CRC-8/SAE-J1850 CRC-8/J1850 0x1D 0xFF false / false 0xFF
CRC-8/SMBUS CRC-8 0x07 0x00 false / false 0x00
CRC-8/TECH-3250 CRC-8/AES · CRC-8/EBU 0x1D 0xFF true / true 0x00
CRC-8/WCDMA 0x9B 0x00 true / true 0x00
CRC-16
CRC-16/ARC CRC-16 · CRC-16/IBM · CRC-16/LHA 0x8005 0x0000 true / true 0x0000
CRC-16/CDMA2000 0xC867 0xFFFF false / false 0x0000
CRC-16/CMS 0x8005 0xFFFF false / false 0x0000
CRC-16/DDS-110 0x8005 0x800D false / false 0x0000
CRC-16/DECT-R R-CRC-16 0x0589 0x0000 false / false 0x0001
CRC-16/DECT-X X-CRC-16 0x0589 0x0000 false / false 0x0000
CRC-16/DNP 0x3D65 0x0000 true / true 0xFFFF
CRC-16/EN-13757 0x3D65 0x0000 false / false 0xFFFF
CRC-16/GENIBUS CRC-16/DARC · CRC-16/EPC · CRC-16/EPC-C1G2 · CRC-16/I-CODE 0x1021 0xFFFF false / false 0xFFFF
CRC-16/GSM 0x1021 0x0000 false / false 0xFFFF
CRC-16/IBM-3740 CRC-16/CCITT-FALSE · CRC-16/AUTOSAR 0x1021 0xFFFF false / false 0x0000
CRC-16/IBM-SDLC CRC-16/X-25 · CRC-16/X25 · CRC-16/ISO-HDLC · CRC-B · X-25 0x1021 0xFFFF true / true 0xFFFF
CRC-16/ISO-IEC-14443-3-A CRC-A 0x1021 0xC6C6 true / true 0x0000
CRC-16/KERMIT CRC-16/CCITT · CRC-16/CCITT-TRUE · CRC-16/V-41-LSB · CRC-CCITT 0x1021 0x0000 true / true 0x0000
CRC-16/LJ1200 0x6F63 0x0000 false / false 0x0000
CRC-16/M17 0x5935 0xFFFF false / false 0x0000
CRC-16/MAXIM-DOW CRC-16/MAXIM 0x8005 0x0000 true / true 0xFFFF
CRC-16/MCRF4XX 0x1021 0xFFFF true / true 0x0000
CRC-16/MODBUS 0x8005 0xFFFF true / true 0x0000
CRC-16/NRSC-5 0x080B 0xFFFF true / true 0x0000
CRC-16/OPENSAFETY-A 0x5935 0x0000 false / false 0x0000
CRC-16/OPENSAFETY-B 0x755B 0x0000 false / false 0x0000
CRC-16/PROFIBUS CRC-16/IEC-61158-2 0x1DCF 0xFFFF false / false 0xFFFF
CRC-16/RIELLO 0x1021 0xB2AA true / true 0x0000
CRC-16/SPI-FUJITSU CRC-16/AUG-CCITT 0x1021 0x1D0F false / false 0x0000
CRC-16/T10-DIF 0x8BB7 0x0000 false / false 0x0000
CRC-16/TELEDISK 0xA097 0x0000 false / false 0x0000
CRC-16/TMS37157 0x1021 0x89EC true / true 0x0000
CRC-16/UMTS CRC-16/BUYPASS · CRC-16/VERIFONE 0x8005 0x0000 false / false 0x0000
CRC-16/USB 0x8005 0xFFFF true / true 0xFFFF
CRC-16/XMODEM CRC-16/ACORN · CRC-16/LTE · CRC-16/V-41-MSB · ZMODEM 0x1021 0x0000 false / false 0x0000
CRC-32
CRC-32/AIXM CRC-32Q 0x814141AB 0x00000000 false / false 0x00000000
CRC-32/AUTOSAR 0xF4ACFB13 0xFFFFFFFF true / true 0xFFFFFFFF
CRC-32/BASE91-D CRC-32D 0xA833982B 0xFFFFFFFF true / true 0xFFFFFFFF
CRC-32/BZIP2 CRC-32/AAL5 · CRC-32/DECT-B · B-CRC-32 0x04C11DB7 0xFFFFFFFF false / false 0xFFFFFFFF
CRC-32/CD-ROM-EDC 0x8001801B 0x00000000 true / true 0x00000000
CRC-32/CKSUM CRC-32/POSIX 0x04C11DB7 0x00000000 false / false 0xFFFFFFFF
CRC-32/ISCSI CRC-32C · CRC-32/BASE91-C · CRC-32/CASTAGNOLI · CRC-32/INTERLAKEN 0x1EDC6F41 0xFFFFFFFF true / true 0xFFFFFFFF
CRC-32/ISO-HDLC CRC-32 · CRC-32/ADCCP · CRC-32/V-42 · CRC-32/XZ · PKZIP 0x04C11DB7 0xFFFFFFFF true / true 0xFFFFFFFF
CRC-32/JAMCRC 0x04C11DB7 0xFFFFFFFF true / true 0x00000000
CRC-32/MEF 0x741B8CD7 0xFFFFFFFF true / true 0x00000000
CRC-32/MPEG-2 0x04C11DB7 0xFFFFFFFF false / false 0x00000000
CRC-32/XFER 0x000000AF 0x00000000 false / false 0x00000000
Eigen parameters

Gebruik dit als je apparaat een polynoom documenteert die niet in de tabel hierboven staat.

Resultaat
Alle 63 parametersets worden in de testsuite getoetst aan hun gepubliceerde checkwaarden uit de catalogus, en CRC-32/ISO-HDLC wordt daarnaast vergeleken met de ingebouwde zlib.crc32 van Node als onafhankelijke referentie. — Go Tools Engineering Team · Sep 6, 2026

Gebouwd en geverifieerd door het engineeringteam van Go Tools.

Snelle antwoorden

CRC-32 van “123456789”

0xCBF43926 0xCBF43926 voor CRC-32/ISO-HDLC, de variant die ZIP, PNG, Ethernet en gzip gebruiken.

CRC-16/MODBUS van “123456789”

0x4B37 0x4B37, met poly 0x8005, init 0xFFFF, invoer en uitvoer gespiegeld, geen laatste XOR.

CRC-16/CCITT-FALSE van “123456789”

0x29B1 0x29B1. De formele naam in de catalogus is CRC-16/IBM-3740: poly 0x1021, init 0xFFFF, geen spiegeling.

Hoeveel CRC-varianten zijn er?

63 Deze calculator dekt 63 varianten uit de catalogus: 20 met breedte 8, 31 met breedte 16 en 12 met breedte 32.

Wat is een CRC?

Een cyclische redundantiecontrole behandelt een blok data als de coëfficiënten van een heel lange binaire polynoom, deelt die met modulo-2-rekenwerk door een vaste generatorpolynoom en houdt de rest over. Die rest is de checksum, in het Nederlands ook wel de controlesom. De constructie is populair omdat de deling neerkomt op schuifoperaties en XOR-bewerkingen, wat in hardware vrijwel niets kost, en omdat de algebra harde garanties geeft in plaats van statistische hoop: een goed gekozen 16-bits polynoom detecteert elke enkelvoudige bitfout, elke dubbele bitfout binnen een bruikbare bloklengte, elk oneven aantal omgeklapte bits, en elke burst van 16 of minder opeenvolgende beschadigde bits.

Wat CRC in de praktijk verwarrend maakt, is dat de polynoom maar één van zes parameters is. Twee implementaties kunnen het eens zijn over de polynoom en toch over elk resultaat van mening verschillen, omdat ze verschillen in de startwaarde van het register, in de vraag of de bitvolgorde van de invoerbytes en van het uitvoerregister omgekeerd wordt, en in de constante die er aan het eind met XOR bij komt. Een CRC-variant is die hele parameterset en niet de polynoom alleen — daarom zegt een naam als “CRC-16” op zichzelf vrijwel niets, en daarom toont deze pagina naast elk resultaat de polynoom, de startwaarde, beide spiegelvlaggen en de laatste XOR, met de breedte als groepskop.

Eén kanttekening die de tabel niet kan tonen: een 16-bits polynoom detecteert elk oneven aantal omgeklapte bits alleen als x+1 er een deler van is. Dat geldt voor de twee die je het vaakst tegenkomt, 0x1021 en 0x8005, maar niet voor allemaal — CRC-16/T10-DIF en CRC-16/PROFIBUS horen bij de uitzonderingen.

// CRC-16/MODBUS: poly=0x8005, init=0xFFFF, refin/refout=true, xorout=0x0000
// Written in the reflected form, so the polynomial appears bit-reversed as 0xA001.
function crc16Modbus(bytes) {
  let crc = 0xffff;
  for (const byte of bytes) {
    crc ^= byte;
    for (let i = 0; i < 8; i++) {
      crc = crc & 1 ? (crc >>> 1) ^ 0xa001 : crc >>> 1;
    }
  }
  return crc;
}

crc16Modbus([0x01, 0x03, 0x00, 0x00, 0x00, 0x0a]); // 0xCDC5
// On the wire Modbus RTU sends the low byte first: ... 0x0A 0xC5 0xCD

Wat deze calculator doet

Alle 63 varianten tegelijk

CRC-8, CRC-16 en CRC-32 worden samen herberekend terwijl je typt. Geen keuzelijst waarin je eerst moet gokken voordat je iets te zien krijgt.

Variant terugzoeken

Typ de checksum die je hebt gekregen en de varianten die hem opleveren lichten op, zodat een onbekend algoritme identificeren één stap kost in plaats van twintig.

Formele namen en namen uit de handleiding

Elke rij toont de naam uit de RevEng-catalogus plus de aliassen die in het veld gebruikt worden — CCITT-FALSE, CRC-16/IBM, CRC-32C, X-25 en de rest.

Volledige parametertabel

Polynoom, startwaarde, beide spiegelvlaggen en de laatste XOR staan naast elk resultaat, zodat je een treffer tegen een specificatie kunt controleren.

Eigen parameters

Breedte, polynoom, init, spiegeling en laatste XOR zijn allemaal aanpasbaar, voor polynomen die de catalogus nooit gehaald hebben.

Draait volledig offline

De berekening gebeurt in je browser. Productieframes en firmware-images verlaten de machine niet.

Uitgewerkte voorbeelden

De checkwaarde uit de catalogus

123456789
CRC-32/ISO-HDLC = 0xCBF43926, CRC-16/MODBUS = 0x4B37, CRC-8/SMBUS = 0xF4

Elke CRC-variant in de RevEng-catalogus publiceert zijn resultaat voor de ASCII-string 123456789. Daarmee is deze invoer de standaard zelftest: wijkt een bibliotheek af van de tabel hier, dan zit de bibliotheek fout.

Een Modbus RTU-verzoekframe

01 03 00 00 00 0A
CRC-16/MODBUS = 0xCDC5

Holding registers uitlezen van slave 1. Modbus RTU zet de lage CRC-byte eerst, dus dit frame gaat als 01 03 00 00 00 0A C5 CD over de lijn — een omkering die een flink deel verklaart van de checksums die mensen niet kloppend krijgen.

Dezelfde bytes, vier CRC-16-antwoorden

DEADBEEF
MODBUS = 0xC19B, CCITT-FALSE = 0x4097, XMODEM = 0xC457, KERMIT = 0x1915

Gelezen in Hex-modus, dus vier bytes in plaats van de acht tekens van de tekenreeks. De vier bekendste CRC-16-varianten zijn het er volstrekt oneens over. Er is niets kapot: ze verschillen in startwaarde, spiegeling en laatste XOR, niet in correctheid.

Terugzoeken vanuit een antwoord van een apparaat

123456789 met verwachte waarde 0x29B1
CRC-16/IBM-3740 (in je handleiding waarschijnlijk CRC-16/CCITT-FALSE)

Dit is precies de situatie waarvoor de calculator gebouwd is. Je hebt data en de checksum die iemand anders heeft berekend, maar niet de naam van de variant — dus zoek je naar de parameterset die hem reproduceert.

Zo gebruik je de CRC-calculator

  1. 1

    Kies tekst of hex

    Protocolframes zijn vrijwel altijd hex. Gebruik tekst alleen als je de checksum van een letterlijke string berekent, zoals de zelftestwaarde 123456789.

  2. 2

    Plak je data

    In hex-modus worden scheidingstekens genegeerd, dus 01 03 00 00 00 0A, 0x01 0x03 en 010300 00000A worden alle drie geaccepteerd.

  3. 3

    Lees de variant af die je nodig hebt

    De tabel is gegroepeerd op breedte. De formele namen komen uit de RevEng-catalogus, met daaronder de aliassen die je apparaathandleiding waarschijnlijk gebruikt.

  4. 4

    Of werk andersom

    Heb je al een checksum en wil je weten van welke variant die is, typ hem dan in het veld voor de verwachte waarde en lees de opgelichte rij af.

Waarom je checksum niet klopt

De tekst “01 03” controleren in plaats van de bytes

Blijf je in tekstmodus staan, dan rekent de calculator over de ASCII-tekens van je hexdump in plaats van over de bytes die daarmee bedoeld zijn. Schakel naar Hex — het aantal bytes onder de modusschakelaar vertelt je welke lezing je hebt gekregen.

✗ Fout
Text mode, input "01 03" -> 5 bytes: 30 31 20 30 33
✓ Correct
Hex mode, input "01 03" -> 2 bytes: 01 03

Vergelijken met een checksum waarvan de bytes zijn omgedraaid

Modbus RTU verstuurt de lage CRC-byte eerst. Een frame dat op C5 CD eindigt draagt de checksum 0xCDC5, niet 0xC5CD.

✗ Fout
expected 0xC5CD  (bytes read in transmission order)
✓ Correct
expected 0xCDC5  (bytes reassembled low-byte-first)

Het checksumveld meerekenen in zijn eigen berekening

De CRC dekt de bytes die eraan voorafgaan. Het hele frame er inclusief staart weer in stoppen levert een restwaarde op in plaats van de checksum.

✗ Fout
01 03 00 00 00 0A C5 CD    <- trailer included
✓ Correct
01 03 00 00 00 0A          <- payload only

Aannemen dat “CRC-16” een algoritme aanwijst

Eenendertig varianten in de catalogus zijn 16 bits breed. Zonder de andere vijf parameters grenst die naam niets af.

✗ Fout
spec says: "trailer is a CRC-16"
✓ Correct
spec says: "CRC-16/MODBUS, poly 0x8005, init 0xFFFF, refin/refout true"

Wanneer je dit nodig hebt

Een Modbus-verbinding debuggen
Een PLC wijst je frames af en je wilt weten of de CRC fout is of alleen een omgekeerde bytevolgorde heeft. Bereken CRC-16/MODBUS en vergelijk beide volgordes.
Een ongedocumenteerd protocol identificeren
Je hebt verkeer opgenomen met een staart van twee bytes die op een checksum lijkt. Voer de payload en die staart in bij het terugzoeken en kijk welke variant hem opeist.
Firmware overzetten tussen toolchains
Een bibliotheek van de leverancier en je eigen implementatie zijn het oneens. Beide vergelijken met de checkwaarde uit de catalogus laat zien welke van de twee is afgedreven.
Een specificatie schrijven of nakijken
Alleen “CRC-16” noemen in een protocoldocument garandeert fouten in de koppeling. De parametertabel geeft je de zes waarden die het algoritme werkelijk vastleggen.
Opgeslagen data verifiëren
Bestandssystemen, archiefformaten en flash-images dragen CRC-32-velden. Er één opnieuw berekenen vertelt je of een blok intact gebleven is.

Zo werkt CRC

Notatie van de polynoom
De tabel drukt polynomen af in de normale vorm (MSB eerst): 0x8005 betekent x^16 + x^15 + x^2 + 1. Gespiegelde implementaties tonen dezelfde polynoom vaak als 0xA001, en de Koopman-notatie schuift hem nog weer anders. Drie notaties voor één polynoom is een klassieke oorzaak van mislukte overzettingen.
De startwaarde
Het register op 0xFFFF laten beginnen in plaats van op 0x0000 maakt de checksum gevoelig voor nulbytes aan het begin. Met een startwaarde van nul verandert de CRC niet als je nullen voor het bericht plakt — en precies die corruptie moet een protocol met frames opvangen.
Spiegeling
refin keert de bits binnen elke invoerbyte om, refout keert het eindregister om. Hardware schuift bits MSB-first naar buiten, terwijl byte-georiënteerde software LSB-first goedkoper vindt, en de gespiegelde parametervormen brengen die twee bij elkaar.
De laatste XOR
xorout wordt als laatste toegepast, en het is niet simpelweg een startwaarde aan de andere kant. Nulbytes die achter het bericht worden geplakt, worden in beide gevallen opgemerkt. Wat een xorout ongelijk aan nul wél verandert, is het residu dat een ontvanger krijgt als hij de CRC over bericht en checksum samen laat lopen: bij xorout nul is dat residu zelf nul, zodat nullen achter het CRC-veld nog steeds doorkomen. Het zorgt er ook voor dat een bericht van alleen nullen een checksum ongelijk aan nul oplevert.
De checkwaarde
Elke variant in de catalogus publiceert zijn resultaat voor de ASCII-string 123456789. De 63 waarden die deze pagina toont zodra die invoer geladen is, zijn precies die gepubliceerde constanten, en daarmee wordt de engine achter deze pagina getest.

Zo krijg je een kloppend resultaat

Noem de parameters, niet het algoritme
Zet “poly 0x1021, init 0xFFFF, refin false, refout false, xorout 0x0000” in je specificatie. “CRC-16/CCITT” heeft minstens drie verschillende dingen betekend.
Controleer de bytevolgorde apart
Zit een checksum één byte-omkering van kloppen af, dan is het algoritme goed en deugt de framing niet. Behandel dat als twee verschillende fouten.
Toets eerst tegen de checkwaarde
Voordat je je data gaat uitpluizen: controleer of je implementatie voor 123456789 de waarde uit de catalogus teruggeeft. Dat scheidt binnen enkele seconden een kapot algoritme van een verkeerde invoer.
Wees expliciet over wat er meetelt
De meeste afwijkingen komen doordat startmarkeringen, adressen of lengtevelden wel of juist niet worden meegerekend. Bepaal precies welke bytes de CRC bestrijkt en schrijf dat op.
Gebruik geen CRC waar een MAC nodig is
CRC is lineair en triviaal te vervalsen. Kan een tegenstander de data aanpassen, gebruik dan HMAC.

Veelgestelde vragen

Waarom geeft mijn apparaat een andere CRC dan deze calculator?
Bijna altijd omdat je twee verschillende varianten met elkaar vergelijkt. Alleen CRC-16 al heeft 31 parametersets in de catalogus, en MODBUS, CCITT-FALSE, XMODEM en KERMIT leveren uit identieke bytes vier getallen op die niets met elkaar te maken hebben. Vul de waarde van het apparaat in bij de verwachte waarde: reproduceert een variant hem, dan licht die rij op en heb je je antwoord. Komt er niets overeen, dan zijn de bytes waarover gerekend wordt niet wat jij denkt — controleer de bytevolgorde, en controleer of de start- en eindmarkeringen van het frame wel of niet in de berekening zitten.
Welke CRC-16 gebruikt Modbus?
CRC-16/MODBUS: polynoom 0x8005, startwaarde 0xFFFF, invoer en uitvoer allebei gespiegeld, geen laatste XOR. Het punt waarop het vaak misgaat is de verzendvolgorde en niet het algoritme — Modbus RTU verstuurt de lage CRC-byte eerst, dus een frame met checksum 0xCDC5 draagt aan het eind de bytes C5 CD. In de gids over de CRC-16-varianten staat zo'n frame volledig uitgewerkt.
Wat is het verschil tussen CRC-16/CCITT en CRC-16/CCITT-FALSE?
Het zijn verschillende algoritmen met namen die verwarrend veel op elkaar lijken, en precies daarom heeft de RevEng-catalogus ze allebei hernoemd. Wat men CCITT-FALSE noemt is CRC-16/IBM-3740: startwaarde 0xFFFF, geen spiegeling. Wat meestal met het kale CCITT bedoeld wordt is CRC-16/KERMIT: startwaarde 0x0000, invoer en uitvoer gespiegeld. Deze calculator toont zowel de formele naam als de naam die je apparaathandleiding waarschijnlijk gebruikt.
Kan CRC aantonen dat er met een bestand geknoeid is?
Nee. CRC is een foutdetectiecode voor toevallige corruptie op een ruizig kanaal, en de code is lineair — iedereen kan een bericht aanpassen en zo bijstellen dat de CRC nog steeds klopt. Wil je integriteit tegenover een bewuste aanvaller, gebruik dan een cryptografische hash zoals SHA-256, of een geauthenticeerde constructie als HMAC. CRC is uitstekend in waar het voor gemaakt is en biedt geen enkele beveiliging.
Wat doen refin en refout nu precies?
refin keert de bitvolgorde binnen elke invoerbyte om voordat die het register in gaat; refout keert de bitvolgorde van het eindregister om. Ze bestaan omdat schuifregisters in hardware en tabelimplementaties in software de bits in tegengestelde richting doorschuiven, en de gespiegelde vormen laten allebei op hetzelfde getal uitkomen. Ze zijn niet hetzelfde als de bytevolgorde — spiegeling werkt op de bits binnen één byte, terwijl de bytevolgorde bepaalt in welke volgorde de bytes zelf komen.
Ik heb alleen de checksum, niet de data. Kan de tool terugrekenen?
Nee, en geen enkele tool kan dat. Een CRC perst een willekeurig lang bericht samen tot 8, 16 of 32 bits, dus ontelbaar veel verschillende berichten delen elke gegeven waarde — het is geen kwestie van moeite. Het omgekeerd opzoeken op deze pagina beantwoordt een nauwere vraag: gegeven de data en een checksum die iemand daaruit heeft berekend, welke parameterset verbindt die twee. Heb je wel het antwoord van een apparaat opgevangen maar niet de payload erachter, vang dan eerst die payload op. Voor het kiezen tussen breedtes in plaats van het identificeren van een variant, zie de gids over de CRC-16-varianten.
Waarom toont de calculator 63 varianten terwijl mijn apparaat er maar één noemt?
Omdat de nuttige vraag meestal niet “bereken een CRC” is, maar “welke van deze heeft de waarde opgeleverd die ik in handen heb”. Tools die je eerst een variant laten kiezen, gaan ervan uit dat je het antwoord al kent. Alle varianten tegelijk tonen maakt van identificatie één keer opzoeken, en met de parameterkolommen bevestig je de treffer tegen de specificatie in plaats van op een naam te vertrouwen.
Gaat mijn data ergens naartoe?
Nee. De hele berekening draait in je browser, met dezelfde engine die de tabel op deze pagina heeft opgebouwd — er is geen upload, geen API-aanroep en geen logbestand. Je kunt de netwerkverbinding verbreken en de tool werkt gewoon door, en dat telt, want CRC-invoer bestaat vaak uit productieframes of firmware-images.

Gerelateerde tools

Alle tools bekijken →