CRC Calculator

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.

9 Bytes
Parameter

ErgebnisCRC-32

0xCBF43926
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.

AlgorithmusErgebnisPolyInitRefInRefOutXorOutCheckVerwendung
0x40x30x0falsefalse0x70x4GSM mobile networks
0x60x30x7truetrue0x00x6Robust Header Compression
0x70x30x0truetrue0x00x7ITU-T G.704 (E1 framing)
0x190x050x1Ftruetrue0x1F0x19USB token packets
0x000x090x09falsefalse0x000x00EPC Gen2 RFID
0x070x150x00truetrue0x000x07ITU-T G.704
0x060x030x00truetrue0x000x06ITU-T G.704
0x750x090x00falsefalse0x000x75SD / MMC card commands
0xF40x070x00falsefalse0x000xF4SMBus PEC, I2C sensors
0xA10x310x00truetrue0x000xA1Dallas/Maxim 1-Wire (DS18B20)
0xD00x070xFFtruetrue0x000xD0Robust Header Compression
0xA10x070x00falsefalse0x550xA1ATM HEC (ITU-T I.432.1)
0x4B0x1D0xFFfalsefalse0xFF0x4BAutomotive SAE J1850, AUTOSAR E2E
0xDF0x2F0xFFfalsefalse0xFF0xDFAUTOSAR E2E profiles
0xDA0x9B0xFFfalsefalse0x000xDACDMA2000 mobile
0x150x390x00truetrue0x000x15Data Radio Channel
0xBC0xD50x00falsefalse0x000xBCDVB-S2 baseband header
0x970x1D0xFFtruetrue0x000x97AES3 / EBU digital audio
0x7E0x1D0xFDfalsefalse0x000x7EPhilips I-CODE RFID
0x250x9B0x00truetrue0x000x25WCDMA mobile
0x260xA70x00truetrue0x000x26Bluetooth HEC
0xEA0x9B0x00falsefalse0x000xEALTE (3GPP TS 36.212)
0xF70x310xFFfalsefalse0x000xF7HD Radio, Sensirion SHT sensors
0x3E0x2F0x00falsefalse0x000x3EopenSAFETY
0x370x1D0x00falsefalse0x000x37GSM
0x940x490x00falsefalse0xFF0x94GSM
0xB40x1D0xFFfalsefalse0x000xB4HITAG RFID
0x990x1D0xC7falsefalse0x000x99MIFARE application directory
0x1990x2330x000falsefalse0x0000x199ATM AAL 3/4
0x5A30x3850x01Afalsefalse0x0000x5A3FlexRay header
0xF5B0x80F0x000falsefalse0x0000xF5BDECT cordless
0xDAF0x80F0x000falsetrue0x0000xDAF3GPP UMTS
0xD4D0xF130xFFFfalsefalse0x0000xD4DCDMA2000 mobile
0x04FA0x1CF50x0000falsefalse0x00000x04FABBC time signal
0x082D0x08050x0000truetrue0x00000x082DData Radio Channel
0x059E0x45990x0000falsefalse0x00000x059EClassical CAN bus frames
0x25660x68150x0000falsefalse0x00010x2566MPT 1327 trunked radio
0xBB3D0x80050x0000truetrue0x00000xBB3DARC, LHA, legacy disk formats
0x4B370x80050xFFFFtruetrue0x00000x4B37Modbus RTU frames
0xB4C80x80050xFFFFtruetrue0xFFFF0xB4C8USB data packets
0x44C20x80050x0000truetrue0xFFFF0x44C2Maxim 1-Wire / iButton
0x29B10x10210xFFFFfalsefalse0x00000x29B1Most "CCITT" implementations, AUTOSAR
0x31C30x10210x0000falsefalse0x00000x31C3XMODEM, ZMODEM, SD card data
0x21890x10210x0000truetrue0x00000x2189Kermit, Bluetooth, V.41
0x906E0x10210xFFFFtruetrue0xFFFF0x906EX.25, HDLC, PPP, ISO 14443-B
0x6F910x10210xFFFFtruetrue0x00000x6F91Microchip MCRF4xx, MAVLink
0xD64E0x10210xFFFFfalsefalse0xFFFF0xD64EGrundfos GENIbus, EPC RFID
0xE5CC0x10210x1D0Ffalsefalse0x00000xE5CCFujitsu SPI flash
0xCE3C0x10210x0000falsefalse0xFFFF0xCE3CGSM
0x26B10x10210x89ECtruetrue0x00000x26B1TI TMS37157 transponders
0x63D00x10210xB2AAtruetrue0x00000x63D0Riello UPS protocol
0xBF050x10210xC6C6truetrue0x00000xBF05ISO 14443-A (MIFARE, NFC-A)
0xEA820x3D650x0000truetrue0xFFFF0xEA82DNP3 (SCADA)
0xC2B70x3D650x0000falsefalse0xFFFF0xC2B7Wireless M-Bus metering
0xFEE80x80050x0000falsefalse0x00000xFEE8Verifone, UMTS
0xAEE70x80050xFFFFfalsefalse0x00000xAEE7RPM package format
0x9ECF0x80050x800Dfalsefalse0x00000x9ECFELV DDS-110 function generator
0x007E0x05890x0000falsefalse0x00010x007EDECT cordless
0x007F0x05890x0000falsefalse0x00000x007FDECT cordless
0xD0DB0x8BB70x0000falsefalse0x00000xD0DBSCSI data integrity field
0x0FB30xA0970x0000falsefalse0x00000x0FB3Teledisk disk images
0x4C060xC8670xFFFFfalsefalse0x00000x4C06CDMA2000 mobile
0xA8190x1DCF0xFFFFfalsefalse0xFFFF0xA819PROFIBUS PA
0x5D380x59350x0000falsefalse0x00000x5D38openSAFETY
0x20FE0x755B0x0000falsefalse0x00000x20FEopenSAFETY
0xBDF40x6F630x0000falsefalse0x00000xBDF4LoJack vehicle tracking
0xA0660x080B0xFFFFtruetrue0x00000xA066HD Radio
0x772B0x59350xFFFFfalsefalse0x00000x772BM17 digital radio
0x04F030x1685B0x00000falsefalse0x000000x04F03CAN FD frames up to 16 bytes
0x0ED8410x1028990x000000falsefalse0x0000000x0ED841CAN FD frames over 16 bytes
0x21CF020x864CFB0xB704CEfalsefalse0x0000000x21CF02OpenPGP ASCII armor
0xC25A560x00065B0x555555truetrue0x0000000xC25A56Bluetooth Low Energy packets
0xCDE7030x864CFB0x000000falsefalse0x0000000xCDE703LTE, RTCM / GNSS (CRC-24Q)
0x23EF520x8000630x000000falsefalse0x0000000x23EF52LTE code blocks
0x7979BD0x5D6DCB0xFEDCBAfalsefalse0x0000000x7979BDFlexRay channel A
0x1F23B80x5D6DCB0xABCDEFfalsefalse0x0000000x1F23B8FlexRay channel B
0xB4F3E60x328B630xFFFFFFfalsefalse0xFFFFFF0xB4F3E6Interlaken protocol
0x200FA50x8000630xFFFFFFfalsefalse0xFFFFFF0x200FA5OS-9 module CRC
0x04C34ABF0x2030B9C70x3FFFFFFFfalsefalse0x3FFFFFFF0x04C34ABFCDMA (TIA-95)
0x0CE9E46C0x04C11DB70x7FFFFFFFfalsefalse0x7FFFFFFF0x0CE9E46CPhilips CD-i
0xCBF439260x04C11DB70xFFFFFFFFtruetrue0xFFFFFFFF0xCBF43926Ethernet, ZIP, gzip, PNG, zlib
0xE30692830x1EDC6F410xFFFFFFFFtruetrue0xFFFFFFFF0xE3069283iSCSI, SCTP, ext4, Btrfs, SSE4.2
0xFC8919180x04C11DB70xFFFFFFFFfalsefalse0xFFFFFFFF0xFC891918bzip2, ATM AAL5
0x0376E6E70x04C11DB70xFFFFFFFFfalsefalse0x000000000x0376E6E7MPEG-2 transport stream, STM32 hardware CRC
0x765E76800x04C11DB70x00000000falsefalse0xFFFFFFFF0x765E7680POSIX cksum (before the length is appended)
0x340BC6D90x04C11DB70xFFFFFFFFtruetrue0x000000000x340BC6D9Altera JAM, bitwise NOT of CRC-32
0x873155760xA833982B0xFFFFFFFFtruetrue0xFFFFFFFF0x87315576Base91 encoding
0x3010BF7F0x814141AB0x00000000falsefalse0x000000000x3010BF7FAviation data (AIXM)
0xBD0BE3380x000000AF0x00000000falsefalse0x000000000xBD0BE338XFER
0x1697D06A0xF4ACFB130xFFFFFFFFtruetrue0xFFFFFFFF0x1697D06AAUTOSAR E2E profile 4
0x6EC2EDC40x8001801B0x00000000truetrue0x000000000x6EC2EDC4CD-ROM sector error detection
0xD2C22F510x741B8CD70xFFFFFFFFtruetrue0x000000000xD2C22F51Multiscale Electrophysiology Format
0xD4164FC6460x00048200090x0000000000falsefalse0xFFFFFFFFFF0xD4164FC646GSM control channel
0x6C40DF5F0B4973470x42F0E1EBA9EA36930x0000000000000000falsefalse0x00000000000000000x6C40DF5F0B497347DLT-1 tape cartridges
0x995DC9BBDF1939FA0x42F0E1EBA9EA36930xFFFFFFFFFFFFFFFFtruetrue0xFFFFFFFFFFFFFFFF0x995DC9BBDF1939FAxz / LZMA2 containers
0xB90956C775A410010x000000000000001B0xFFFFFFFFFFFFFFFFtruetrue0xFFFFFFFFFFFFFFFF0xB90956C775A41001ISO 3309, Go hash/crc64 ISO table
0x62EC59E3F1A4F00A0x42F0E1EBA9EA36930xFFFFFFFFFFFFFFFFfalsefalse0xFFFFFFFFFFFFFFFF0x62EC59E3F1A4F00AWolfgang Ehrhardt library
0x75D4B74F024ECEEA0x259C84CBA64263490xFFFFFFFFFFFFFFFFtruetrue0x00000000000000000x75D4B74F024ECEEAMicrosoft MS-FCIADS
0xE9C6D914C4B8D9CA0xAD93D23594C935A90x0000000000000000truetrue0x00000000000000000xE9C6D914C4B8D9CARedis RDB files
0xAE8B14860A7998880xAD93D23594C936590xFFFFFFFFFFFFFFFFtruetrue0xFFFFFFFFFFFFFFFF0xAE8B14860A799888NVMe, Amazon S3 checksums

So berechnen Sie eine CRC-Prüfsumme

  1. Eingabeart wählen. „Text“ für Zeichenketten, „Hex“ für Rohbytes wie ein Telegramm, „Datei“ für beliebige Dateien.
  2. 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.
  3. 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.

VariantePolynomStartwertGespiegeltXORPrüfwertVerwendung
CRC-80700nein00F4SMBus, I²C-Sensoren
CRC-8/SAE-J18501DFFneinFF4BAutomobil, AUTOSAR
CRC-16/CCITT-FALSE1021FFFFnein000029B1übliche „CRC-CCITT“
CRC-16/XMODEM10210000nein000031C3XMODEM, SD-Karten
CRC-16/MODBUS8005FFFFja00004B37Modbus RTU
CRC-16/PROFIBUS1DCFFFFFneinFFFFA819PROFIBUS PA
CRC-3204C11DB7FFFFFFFFjaFFFFFFFFCBF43926ZIP, PNG, Ethernet
CRC-32C1EDC6F41FFFFFFFFjaFFFFFFFFE3069283iSCSI, ext4, SSE4.2
CRC-32/MPEG-204C11DB7FFFFFFFFnein000000000376E6E7MPEG-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. 0xA001 und 0xEDB88320 sind die bitweise gespiegelten Schreibweisen von 0x8005 und 0x04C11DB7 – 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)

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.