CRC berechnen – CRC8, CRC16 und CRC32 Prüfsumme
Berechnen Sie die CRC-Prüfsumme von Text, Hex-Bytes, Base64 oder einer Datei. Zur Auswahl stehen 100 Standardalgorithmen von CRC-8 bis CRC-64; Generatorpolynom, Startwert, Spiegelung und Abschluss-XOR lassen sich auch frei einstellen. Das Ergebnis erscheint schon während der Eingabe.
ErgebnisCRC-32
- Dezimal
- 3421780262
- Binär
- 11001011111101000011100100100110
- Bytes, Big-Endian
- CB F4 39 26
- Bytes, Little-Endian
- 26 39 F4 CB
Prüfwert für „123456789“: 0xCBF43926
Quellcode für diese CRC
Aus den obigen Parametern erzeugt. Bitweise und ohne Tabelle, daher leicht auf Mikrocontroller übertragbar.
#include <stddef.h>
#include <stdint.h>
uint32_t crc_32(const uint8_t *data, size_t len)
{
uint32_t crc = 0xFFFFFFFF;
while (len--) {
crc ^= *data++;
for (int i = 0; i < 8; i++)
crc = (crc & 1) ? (crc >> 1) ^ 0xEDB88320 : crc >> 1;
}
return crc ^ 0xFFFFFFFF;
}
Alle CRC-Algorithmen für diese Eingabe
Ein Klick auf eine Zeile übernimmt deren Parameter in den Rechner.
| Algorithmus | Ergebnis | Poly | Init | RefIn | RefOut | XorOut | Check | Verwendung |
|---|---|---|---|---|---|---|---|---|
| 0x4 | 0x3 | 0x0 | false | false | 0x7 | 0x4 | GSM mobile networks | |
| 0x6 | 0x3 | 0x7 | true | true | 0x0 | 0x6 | Robust Header Compression | |
| 0x7 | 0x3 | 0x0 | true | true | 0x0 | 0x7 | ITU-T G.704 (E1 framing) | |
| 0x19 | 0x05 | 0x1F | true | true | 0x1F | 0x19 | USB token packets | |
| 0x00 | 0x09 | 0x09 | false | false | 0x00 | 0x00 | EPC Gen2 RFID | |
| 0x07 | 0x15 | 0x00 | true | true | 0x00 | 0x07 | ITU-T G.704 | |
| 0x06 | 0x03 | 0x00 | true | true | 0x00 | 0x06 | ITU-T G.704 | |
| 0x75 | 0x09 | 0x00 | false | false | 0x00 | 0x75 | SD / MMC card commands | |
| 0xF4 | 0x07 | 0x00 | false | false | 0x00 | 0xF4 | SMBus PEC, I2C sensors | |
| 0xA1 | 0x31 | 0x00 | true | true | 0x00 | 0xA1 | Dallas/Maxim 1-Wire (DS18B20) | |
| 0xD0 | 0x07 | 0xFF | true | true | 0x00 | 0xD0 | Robust Header Compression | |
| 0xA1 | 0x07 | 0x00 | false | false | 0x55 | 0xA1 | ATM HEC (ITU-T I.432.1) | |
| 0x4B | 0x1D | 0xFF | false | false | 0xFF | 0x4B | Automotive SAE J1850, AUTOSAR E2E | |
| 0xDF | 0x2F | 0xFF | false | false | 0xFF | 0xDF | AUTOSAR E2E profiles | |
| 0xDA | 0x9B | 0xFF | false | false | 0x00 | 0xDA | CDMA2000 mobile | |
| 0x15 | 0x39 | 0x00 | true | true | 0x00 | 0x15 | Data Radio Channel | |
| 0xBC | 0xD5 | 0x00 | false | false | 0x00 | 0xBC | DVB-S2 baseband header | |
| 0x97 | 0x1D | 0xFF | true | true | 0x00 | 0x97 | AES3 / EBU digital audio | |
| 0x7E | 0x1D | 0xFD | false | false | 0x00 | 0x7E | Philips I-CODE RFID | |
| 0x25 | 0x9B | 0x00 | true | true | 0x00 | 0x25 | WCDMA mobile | |
| 0x26 | 0xA7 | 0x00 | true | true | 0x00 | 0x26 | Bluetooth HEC | |
| 0xEA | 0x9B | 0x00 | false | false | 0x00 | 0xEA | LTE (3GPP TS 36.212) | |
| 0xF7 | 0x31 | 0xFF | false | false | 0x00 | 0xF7 | HD Radio, Sensirion SHT sensors | |
| 0x3E | 0x2F | 0x00 | false | false | 0x00 | 0x3E | openSAFETY | |
| 0x37 | 0x1D | 0x00 | false | false | 0x00 | 0x37 | GSM | |
| 0x94 | 0x49 | 0x00 | false | false | 0xFF | 0x94 | GSM | |
| 0xB4 | 0x1D | 0xFF | false | false | 0x00 | 0xB4 | HITAG RFID | |
| 0x99 | 0x1D | 0xC7 | false | false | 0x00 | 0x99 | MIFARE application directory | |
| 0x199 | 0x233 | 0x000 | false | false | 0x000 | 0x199 | ATM AAL 3/4 | |
| 0x5A3 | 0x385 | 0x01A | false | false | 0x000 | 0x5A3 | FlexRay header | |
| 0xF5B | 0x80F | 0x000 | false | false | 0x000 | 0xF5B | DECT cordless | |
| 0xDAF | 0x80F | 0x000 | false | true | 0x000 | 0xDAF | 3GPP UMTS | |
| 0xD4D | 0xF13 | 0xFFF | false | false | 0x000 | 0xD4D | CDMA2000 mobile | |
| 0x04FA | 0x1CF5 | 0x0000 | false | false | 0x0000 | 0x04FA | BBC time signal | |
| 0x082D | 0x0805 | 0x0000 | true | true | 0x0000 | 0x082D | Data Radio Channel | |
| 0x059E | 0x4599 | 0x0000 | false | false | 0x0000 | 0x059E | Classical CAN bus frames | |
| 0x2566 | 0x6815 | 0x0000 | false | false | 0x0001 | 0x2566 | MPT 1327 trunked radio | |
| 0xBB3D | 0x8005 | 0x0000 | true | true | 0x0000 | 0xBB3D | ARC, LHA, legacy disk formats | |
| 0x4B37 | 0x8005 | 0xFFFF | true | true | 0x0000 | 0x4B37 | Modbus RTU frames | |
| 0xB4C8 | 0x8005 | 0xFFFF | true | true | 0xFFFF | 0xB4C8 | USB data packets | |
| 0x44C2 | 0x8005 | 0x0000 | true | true | 0xFFFF | 0x44C2 | Maxim 1-Wire / iButton | |
| 0x29B1 | 0x1021 | 0xFFFF | false | false | 0x0000 | 0x29B1 | Most "CCITT" implementations, AUTOSAR | |
| 0x31C3 | 0x1021 | 0x0000 | false | false | 0x0000 | 0x31C3 | XMODEM, ZMODEM, SD card data | |
| 0x2189 | 0x1021 | 0x0000 | true | true | 0x0000 | 0x2189 | Kermit, Bluetooth, V.41 | |
| 0x906E | 0x1021 | 0xFFFF | true | true | 0xFFFF | 0x906E | X.25, HDLC, PPP, ISO 14443-B | |
| 0x6F91 | 0x1021 | 0xFFFF | true | true | 0x0000 | 0x6F91 | Microchip MCRF4xx, MAVLink | |
| 0xD64E | 0x1021 | 0xFFFF | false | false | 0xFFFF | 0xD64E | Grundfos GENIbus, EPC RFID | |
| 0xE5CC | 0x1021 | 0x1D0F | false | false | 0x0000 | 0xE5CC | Fujitsu SPI flash | |
| 0xCE3C | 0x1021 | 0x0000 | false | false | 0xFFFF | 0xCE3C | GSM | |
| 0x26B1 | 0x1021 | 0x89EC | true | true | 0x0000 | 0x26B1 | TI TMS37157 transponders | |
| 0x63D0 | 0x1021 | 0xB2AA | true | true | 0x0000 | 0x63D0 | Riello UPS protocol | |
| 0xBF05 | 0x1021 | 0xC6C6 | true | true | 0x0000 | 0xBF05 | ISO 14443-A (MIFARE, NFC-A) | |
| 0xEA82 | 0x3D65 | 0x0000 | true | true | 0xFFFF | 0xEA82 | DNP3 (SCADA) | |
| 0xC2B7 | 0x3D65 | 0x0000 | false | false | 0xFFFF | 0xC2B7 | Wireless M-Bus metering | |
| 0xFEE8 | 0x8005 | 0x0000 | false | false | 0x0000 | 0xFEE8 | Verifone, UMTS | |
| 0xAEE7 | 0x8005 | 0xFFFF | false | false | 0x0000 | 0xAEE7 | RPM package format | |
| 0x9ECF | 0x8005 | 0x800D | false | false | 0x0000 | 0x9ECF | ELV DDS-110 function generator | |
| 0x007E | 0x0589 | 0x0000 | false | false | 0x0001 | 0x007E | DECT cordless | |
| 0x007F | 0x0589 | 0x0000 | false | false | 0x0000 | 0x007F | DECT cordless | |
| 0xD0DB | 0x8BB7 | 0x0000 | false | false | 0x0000 | 0xD0DB | SCSI data integrity field | |
| 0x0FB3 | 0xA097 | 0x0000 | false | false | 0x0000 | 0x0FB3 | Teledisk disk images | |
| 0x4C06 | 0xC867 | 0xFFFF | false | false | 0x0000 | 0x4C06 | CDMA2000 mobile | |
| 0xA819 | 0x1DCF | 0xFFFF | false | false | 0xFFFF | 0xA819 | PROFIBUS PA | |
| 0x5D38 | 0x5935 | 0x0000 | false | false | 0x0000 | 0x5D38 | openSAFETY | |
| 0x20FE | 0x755B | 0x0000 | false | false | 0x0000 | 0x20FE | openSAFETY | |
| 0xBDF4 | 0x6F63 | 0x0000 | false | false | 0x0000 | 0xBDF4 | LoJack vehicle tracking | |
| 0xA066 | 0x080B | 0xFFFF | true | true | 0x0000 | 0xA066 | HD Radio | |
| 0x772B | 0x5935 | 0xFFFF | false | false | 0x0000 | 0x772B | M17 digital radio | |
| 0x04F03 | 0x1685B | 0x00000 | false | false | 0x00000 | 0x04F03 | CAN FD frames up to 16 bytes | |
| 0x0ED841 | 0x102899 | 0x000000 | false | false | 0x000000 | 0x0ED841 | CAN FD frames over 16 bytes | |
| 0x21CF02 | 0x864CFB | 0xB704CE | false | false | 0x000000 | 0x21CF02 | OpenPGP ASCII armor | |
| 0xC25A56 | 0x00065B | 0x555555 | true | true | 0x000000 | 0xC25A56 | Bluetooth Low Energy packets | |
| 0xCDE703 | 0x864CFB | 0x000000 | false | false | 0x000000 | 0xCDE703 | LTE, RTCM / GNSS (CRC-24Q) | |
| 0x23EF52 | 0x800063 | 0x000000 | false | false | 0x000000 | 0x23EF52 | LTE code blocks | |
| 0x7979BD | 0x5D6DCB | 0xFEDCBA | false | false | 0x000000 | 0x7979BD | FlexRay channel A | |
| 0x1F23B8 | 0x5D6DCB | 0xABCDEF | false | false | 0x000000 | 0x1F23B8 | FlexRay channel B | |
| 0xB4F3E6 | 0x328B63 | 0xFFFFFF | false | false | 0xFFFFFF | 0xB4F3E6 | Interlaken protocol | |
| 0x200FA5 | 0x800063 | 0xFFFFFF | false | false | 0xFFFFFF | 0x200FA5 | OS-9 module CRC | |
| 0x04C34ABF | 0x2030B9C7 | 0x3FFFFFFF | false | false | 0x3FFFFFFF | 0x04C34ABF | CDMA (TIA-95) | |
| 0x0CE9E46C | 0x04C11DB7 | 0x7FFFFFFF | false | false | 0x7FFFFFFF | 0x0CE9E46C | Philips CD-i | |
| 0xCBF43926 | 0x04C11DB7 | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0xCBF43926 | Ethernet, ZIP, gzip, PNG, zlib | |
| 0xE3069283 | 0x1EDC6F41 | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0xE3069283 | iSCSI, SCTP, ext4, Btrfs, SSE4.2 | |
| 0xFC891918 | 0x04C11DB7 | 0xFFFFFFFF | false | false | 0xFFFFFFFF | 0xFC891918 | bzip2, ATM AAL5 | |
| 0x0376E6E7 | 0x04C11DB7 | 0xFFFFFFFF | false | false | 0x00000000 | 0x0376E6E7 | MPEG-2 transport stream, STM32 hardware CRC | |
| 0x765E7680 | 0x04C11DB7 | 0x00000000 | false | false | 0xFFFFFFFF | 0x765E7680 | POSIX cksum (before the length is appended) | |
| 0x340BC6D9 | 0x04C11DB7 | 0xFFFFFFFF | true | true | 0x00000000 | 0x340BC6D9 | Altera JAM, bitwise NOT of CRC-32 | |
| 0x87315576 | 0xA833982B | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0x87315576 | Base91 encoding | |
| 0x3010BF7F | 0x814141AB | 0x00000000 | false | false | 0x00000000 | 0x3010BF7F | Aviation data (AIXM) | |
| 0xBD0BE338 | 0x000000AF | 0x00000000 | false | false | 0x00000000 | 0xBD0BE338 | XFER | |
| 0x1697D06A | 0xF4ACFB13 | 0xFFFFFFFF | true | true | 0xFFFFFFFF | 0x1697D06A | AUTOSAR E2E profile 4 | |
| 0x6EC2EDC4 | 0x8001801B | 0x00000000 | true | true | 0x00000000 | 0x6EC2EDC4 | CD-ROM sector error detection | |
| 0xD2C22F51 | 0x741B8CD7 | 0xFFFFFFFF | true | true | 0x00000000 | 0xD2C22F51 | Multiscale Electrophysiology Format | |
| 0xD4164FC646 | 0x0004820009 | 0x0000000000 | false | false | 0xFFFFFFFFFF | 0xD4164FC646 | GSM control channel | |
| 0x6C40DF5F0B497347 | 0x42F0E1EBA9EA3693 | 0x0000000000000000 | false | false | 0x0000000000000000 | 0x6C40DF5F0B497347 | DLT-1 tape cartridges | |
| 0x995DC9BBDF1939FA | 0x42F0E1EBA9EA3693 | 0xFFFFFFFFFFFFFFFF | true | true | 0xFFFFFFFFFFFFFFFF | 0x995DC9BBDF1939FA | xz / LZMA2 containers | |
| 0xB90956C775A41001 | 0x000000000000001B | 0xFFFFFFFFFFFFFFFF | true | true | 0xFFFFFFFFFFFFFFFF | 0xB90956C775A41001 | ISO 3309, Go hash/crc64 ISO table | |
| 0x62EC59E3F1A4F00A | 0x42F0E1EBA9EA3693 | 0xFFFFFFFFFFFFFFFF | false | false | 0xFFFFFFFFFFFFFFFF | 0x62EC59E3F1A4F00A | Wolfgang Ehrhardt library | |
| 0x75D4B74F024ECEEA | 0x259C84CBA6426349 | 0xFFFFFFFFFFFFFFFF | true | true | 0x0000000000000000 | 0x75D4B74F024ECEEA | Microsoft MS-FCIADS | |
| 0xE9C6D914C4B8D9CA | 0xAD93D23594C935A9 | 0x0000000000000000 | true | true | 0x0000000000000000 | 0xE9C6D914C4B8D9CA | Redis RDB files | |
| 0xAE8B14860A799888 | 0xAD93D23594C93659 | 0xFFFFFFFFFFFFFFFF | true | true | 0xFFFFFFFFFFFFFFFF | 0xAE8B14860A799888 | NVMe, Amazon S3 checksums |
So berechnen Sie eine CRC-Prüfsumme
- Eingabeart wählen. „Text“ für Zeichenketten, „Hex“ für Rohbytes wie ein Telegramm, „Datei“ für beliebige Dateien.
- Algorithmus wählen. Voreingestellt ist die Standard-CRC-32. Für CRC16 oder CRC8 wählen Sie die Variante aus der Liste oder ändern die Parameter direkt.
- Ergebnis ablesen. Die Prüfsumme wird hexadezimal, dezimal und binär angezeigt, außerdem als Bytefolge in Big-Endian- und Little-Endian-Reihenfolge.
Zur Kontrolle: Mit der Standard-CRC-32 ergibt 123456789 den Wert 0xCBF43926, hello ergibt 0x3610A686 und Prüfsumme (UTF-8) ergibt 0x068D9ED5.
Gebräuchliche CRC-Varianten und ihre Parameter
„CRC16“ und „CRC32“ bezeichnen jeweils eine ganze Familie von Verfahren, die sich in Polynom, Startwert und Spiegelung unterscheiden. Der Prüfwert ist die CRC von 123456789.
| Variante | Polynom | Startwert | Gespiegelt | XOR | Prüfwert | Verwendung |
|---|---|---|---|---|---|---|
| CRC-8 | 07 | 00 | nein | 00 | F4 | SMBus, I²C-Sensoren |
| CRC-8/SAE-J1850 | 1D | FF | nein | FF | 4B | Automobil, AUTOSAR |
| CRC-16/CCITT-FALSE | 1021 | FFFF | nein | 0000 | 29B1 | übliche „CRC-CCITT“ |
| CRC-16/XMODEM | 1021 | 0000 | nein | 0000 | 31C3 | XMODEM, SD-Karten |
| CRC-16/MODBUS | 8005 | FFFF | ja | 0000 | 4B37 | Modbus RTU |
| CRC-16/PROFIBUS | 1DCF | FFFF | nein | FFFF | A819 | PROFIBUS PA |
| CRC-32 | 04C11DB7 | FFFFFFFF | ja | FFFFFFFF | CBF43926 | ZIP, PNG, Ethernet |
| CRC-32C | 1EDC6F41 | FFFFFFFF | ja | FFFFFFFF | E3069283 | iSCSI, ext4, SSE4.2 |
| CRC-32/MPEG-2 | 04C11DB7 | FFFFFFFF | nein | 00000000 | 0376E6E7 | MPEG-2, STM32-CRC-Einheit |
Die Tabelle unter dem Rechner zeigt alle 100 unterstützten Varianten mit ihren Parametern – und dem Ergebnis für Ihre aktuelle Eingabe.
Was die Parameter bedeuten
- Breite: Länge der Prüfsumme in Bit.
- Generatorpolynom: die Konstante, durch die geteilt wird, ohne das höchste Bit notiert.
0xA001und0xEDB88320sind die bitweise gespiegelten Schreibweisen von0x8005und0x04C11DB7– also dieselben Polynome. - Startwert: Inhalt des Registers vor dem ersten Byte.
- Eingabe / Ausgabe spiegeln: ob jedes Byte mit dem niederwertigsten Bit zuerst verarbeitet und ob das Ergebnis bitweise umgedreht wird.
- Abschluss-XOR: Wert, mit dem das Ergebnis am Ende verknüpft wird.
Wenn das Ergebnis nicht passt
- Zeichenkodierung: Umlaute und ß belegen in UTF-8 zwei Bytes, in ISO-8859-1 nur eines. Die Prüfsumme ändert sich entsprechend.
- Zeilenenden: Ein Zeilenumbruch am Ende oder CRLF statt LF verändert die Eingabe.
- Bytereihenfolge: Modbus RTU überträgt das niederwertige CRC-Byte zuerst. Vergleichen Sie mit der Little-Endian-Zeile im Ergebnis.
- Berechnungsbereich: Ob Adresse, Längenfeld oder Kopfdaten in die CRC eingehen, legt das jeweilige Protokoll fest. Die CRC-Bytes selbst gehören nicht dazu.
CRC16 und CRC32 im eigenen Programm berechnen
Unter „Quellcode für diese CRC“ erzeugt der Rechner passenden Code in C, Python und JavaScript für die eingestellten Parameter. Für die Modbus-CRC16 sieht er so aus:
uint16_t crc16_modbus(const uint8_t *data, size_t len)
{
uint16_t crc = 0xFFFF;
while (len--) {
crc ^= *data++;
for (int i = 0; i < 8; i++)
crc = (crc & 1) ? (crc >> 1) ^ 0xA001 : crc >> 1;
}
return crc;
}Weitere CRC-Werkzeuge (englisch)
- CRC16 berechnen – alle 16-Bit-Varianten wie CCITT, XMODEM und MODBUS im direkten Vergleich.
- CRC8 berechnen – SMBus, 1-Wire, SAE J1850 und AUTOSAR.
- CRC64 berechnen – CRC-64/XZ, ECMA-182 und NVME.
- Modbus-CRC berechnen – CRC eines Modbus-RTU-Telegramms anhängen und prüfen.
- Prüfsumme berechnen – Summe, XOR, LRC, Adler-32, MD5 und SHA-256 auf einen Blick.
- Prüfsumme einer Datei berechnen – CRC32, MD5 und SHA-256 für Downloads.
- Wie CRC32 funktioniert – das Verfahren Schritt für Schritt.
Häufige Fragen
Welche Parameter hat die Standard-CRC32?
Generatorpolynom 0x04C11DB7, Startwert 0xFFFFFFFF, Ein- und Ausgabe gespiegelt, Abschluss-XOR 0xFFFFFFFF. Das ist die CRC-32 von ZIP, gzip, PNG, Ethernet und zlib. Für die Zeichenfolge „123456789“ lautet die Prüfsumme 0xCBF43926.
Warum stimmt meine berechnete CRC nicht mit dem Gerät oder Programm überein?
Fast immer liegt es an einem von vier Punkten: eine andere Variante (z. B. CRC-32C statt CRC-32 oder XMODEM statt CCITT-FALSE), andere Eingabebytes (Zeichenkodierung, Zeilenumbruch am Ende, Hex-Werte als Text eingegeben), ein fehlender Startwert oder Abschluss-XOR, oder die Bytereihenfolge des Ergebnisses. Geben Sie dieselben Daten hier ein und suchen Sie in der Tabelle aller Algorithmen nach dem erwarteten Wert – die passende Zeile verrät die Variante.
Kann ich die CRC von Hex-Daten berechnen?
Ja. Stellen Sie die Eingabe auf „Hex“ und fügen Sie die Bytes ein, etwa „01 03 00 0A“, „0x01,0x03“ oder „0103000A“. Im Textmodus werden die Zeichen dagegen zuerst kodiert (standardmäßig UTF-8).
Welche CRC16 brauche ich?
Das hängt vom Protokoll ab: Modbus RTU verwendet CRC-16/MODBUS, XMODEM und SD-Karten CRC-16/XMODEM, die meisten als „CRC-CCITT“ bezeichneten Bibliotheken CRC-16/CCITT-FALSE, HDLC und PPP CRC-16/X-25, PROFIBUS CRC-16/PROFIBUS. Im Zweifel hilft ein Telegramm mit bekannter Prüfsumme als Testvektor.
Was ist der Unterschied zwischen Prüfsumme und CRC?
Prüfsumme ist der Oberbegriff für jeden Wert, mit dem sich Übertragungs- oder Speicherfehler erkennen lassen – auch eine einfache Summe oder ein XOR aller Bytes. Die CRC (zyklische Redundanzprüfung) ist ein bestimmtes Verfahren dafür: Die Daten werden durch ein Generatorpolynom geteilt, der Rest ist die Prüfsumme. Sie erkennt auch vertauschte Bytes und Bündelfehler, die eine einfache Summe übersieht.
Werden meine Daten hochgeladen?
Nein. Die Berechnung erfolgt vollständig per JavaScript in Ihrem Browser. Texte und Dateien verlassen Ihr Gerät nicht.