Skip to content

Calcolatore di Checksum CRC

Incolla esadecimale o testo e ottieni tutte le 63 varianti CRC-8, CRC-16 e CRC-32 in una volta. Hai un checksum che non torna? Inseriscilo e lo strumento nomina la variante: MODBUS, CCITT-FALSE, XMODEM, KERMIT. Tutto in locale.

Niente tracciamento Funziona nel browser Gratuito
Tutto viene calcolato localmente nel tuo browser — i dati che incolli non lasciano mai questo dispositivo.
Prova questi

Tutte le 63 varianti

Ogni riga si ricalcola mentre scrivi.
Variante Risultato 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
Parametri personalizzati

Usalo quando il tuo dispositivo documenta un polinomio che non compare nella tabella qui sopra.

Risultato
Tutti i 63 set di parametri delle varianti sono verificati nella suite di test contro i rispettivi valori di verifica pubblicati a catalogo, e CRC-32/ISO-HDLC è controllato in modo incrociato con zlib.crc32 di Node come oracolo indipendente. — Team Go Tools · Sep 6, 2026

Realizzato e verificato dal team di ingegneria di Go Tools.

Risposte rapide

CRC-32 di «123456789»

0xCBF43926 0xCBF43926 per CRC-32/ISO-HDLC, la variante usata da ZIP, PNG, Ethernet e gzip.

CRC-16/MODBUS di «123456789»

0x4B37 0x4B37, con poly 0x8005, init 0xFFFF, ingresso e uscita riflessi, nessuno XOR finale.

CRC-16/CCITT-FALSE di «123456789»

0x29B1 0x29B1. Il suo nome formale a catalogo è CRC-16/IBM-3740: poly 0x1021, init 0xFFFF, nessuna riflessione.

Quante varianti CRC esistono?

63 Questo calcolatore copre 63 varianti catalogate: 20 di larghezza 8, 31 di larghezza 16 e 12 di larghezza 32.

Che cos'è un CRC?

Un controllo di ridondanza ciclico tratta un blocco di dati come i coefficienti di un polinomio binario molto lungo, lo divide per un polinomio generatore fisso usando l'aritmetica modulo 2 e conserva il resto. Quel resto è il checksum. La costruzione ha avuto fortuna perché la divisione si riduce a scorrimenti e XOR, che in hardware non costano quasi nulla, e perché l'algebra dà garanzie certe invece di speranze statistiche: un polinomio a 16 bit scelto bene rileva ogni errore su singolo bit, ogni errore su doppio bit entro una lunghezza di blocco utile, ogni numero dispari di bit invertiti e ogni burst di 16 o meno bit consecutivi corrotti.

Ciò che nella pratica rende il CRC confuso è che il polinomio è solo uno dei sei parametri. Due implementazioni possono concordare sul polinomio e non azzeccare comunque nemmeno un risultato, perché differiscono nel valore iniziale del registro, nel fatto che i byte in ingresso e il registro in uscita abbiano o meno l'ordine dei bit invertito, e nella costante messa in XOR sul valore finale. Una variante CRC è tutto quel set di parametri, non il polinomio da solo — ed è per questo che un nome come «CRC-16» da solo non identifica quasi nulla, e per cui questa pagina mostra accanto a ogni risultato il polinomio, il valore iniziale, entrambi i flag di riflessione e lo XOR finale, con la larghezza come intestazione di gruppo.

Un'avvertenza che la tabella non può mostrare: un polinomio a 16 bit rileva ogni numero dispari di bit invertiti solo se x+1 lo divide. Vale per i due che con più probabilità incontrerai, 0x1021 e 0x8005, ma non per tutti — CRC-16/T10-DIF e CRC-16/PROFIBUS sono fra le eccezioni.

// 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

Che cosa fa questo calcolatore

Tutte le 63 varianti insieme

CRC-8, CRC-16 e CRC-32 si ricalcolano tutti mentre scrivi. Nessun menu a tendina da indovinare prima di poter vedere qualcosa.

Ricerca inversa

Scrivi il checksum che ti è stato dato e le varianti che lo producono vengono evidenziate: identificare un algoritmo ignoto richiede un passaggio invece di venti.

Nomi formali e nomi da manuale

Ogni riga mostra il nome del catalogo RevEng più gli alias usati sul campo — CCITT-FALSE, CRC-16/IBM, CRC-32C, X-25 e gli altri.

Tabella completa dei parametri

Polinomio, valore iniziale, entrambi i flag di riflessione e XOR finale stanno accanto a ogni risultato, così puoi verificare una corrispondenza contro la specifica.

Parametri personalizzati

Larghezza, polinomio, init, riflessione e XOR finale sono tutti modificabili, per i polinomi che nei cataloghi non sono mai entrati.

Funziona completamente offline

Il calcolo avviene nel tuo browser. Trame di produzione e immagini di firmware non lasciano mai la macchina.

Esempi svolti

Il valore di verifica del catalogo

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

Ogni variante CRC del catalogo RevEng pubblica il proprio risultato per la stringa ASCII 123456789. È questo che rende tale input l'autotest standard: se una libreria non concorda con la tabella qui sopra, è la libreria a sbagliare.

Una richiesta Modbus RTU

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

Lettura dei registri holding dallo slave 1. Modbus RTU accoda il byte basso del CRC per primo, quindi sulla linea questa trama viaggia come 01 03 00 00 00 0A C5 CD — un'inversione che spiega buona parte dei checksum che la gente non riesce a far tornare.

Stessi byte, quattro risposte CRC-16

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

Letto in modalità Esadecimale, quindi quattro byte e non gli otto caratteri della stringa. Le quattro varianti CRC-16 più note danno su di essi risultati completamente diversi. Non è rotto niente: differiscono per valore iniziale, riflessione e XOR finale, non per correttezza.

Ricerca inversa a partire dalla risposta di un dispositivo

123456789 con valore atteso 0x29B1
CRC-16/IBM-3740 (il tuo manuale potrebbe chiamarlo CRC-16/CCITT-FALSE)

È il caso per cui questo calcolatore è nato. Hai i dati e il checksum calcolato da qualcun altro, ma non il nome della variante — quindi cerchi il set di parametri che lo riproduce.

Come si usa il calcolatore CRC

  1. 1

    Scegli testo o esadecimale

    Le trame di protocollo sono quasi sempre esadecimali. Usa il testo solo quando stai calcolando il checksum di una stringa letterale, come il valore di autotest 123456789.

  2. 2

    Incolla i tuoi dati

    In modalità esadecimale i separatori vengono ignorati, quindi 01 03 00 00 00 0A, 0x01 0x03 e 010300 00000A sono tutti accettati.

  3. 3

    Leggi la variante che ti serve

    La tabella è raggruppata per larghezza. I nomi formali vengono dal catalogo RevEng, con sotto gli alias che con ogni probabilità userà il manuale del tuo dispositivo.

  4. 4

    Oppure procedi a ritroso

    Se hai già un checksum e vuoi sapere di quale variante è, scrivilo nel campo del valore atteso e leggi la riga evidenziata.

Perché il tuo checksum non torna

Calcolare il checksum del testo «01 03» invece dei byte

Se resti in modalità testo, il calcolatore elabora i caratteri ASCII del tuo dump esadecimale invece dei byte che rappresentano. Passa alla modalità Esadecimale: il conteggio dei byte sotto il selettore ti dice quale lettura hai ottenuto.

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

Confrontare con un checksum a byte scambiati

Modbus RTU trasmette per primo il byte basso del CRC. Una trama che finisce con C5 CD porta il checksum 0xCDC5, non 0xC5CD.

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

Includere il campo del checksum nel proprio calcolo

Il CRC copre i byte che lo precedono. Rimettere dentro l'intera trama, coda compresa, produce un residuo e non il checksum.

✗ Errato
01 03 00 00 00 0A C5 CD    <- trailer included
✓ Corretto
01 03 00 00 00 0A          <- payload only

Dare per scontato che «CRC-16» identifichi un algoritmo

Le varianti catalogate larghe 16 bit sono trentuno. Senza gli altri cinque parametri il nome non restringe nulla.

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

Quando serve

Diagnosticare un collegamento Modbus
Un PLC rifiuta le tue trame e devi capire se il CRC è sbagliato o soltanto con i byte scambiati. Calcola il CRC-16/MODBUS e confronta entrambi gli ordinamenti.
Identificare un protocollo non documentato
Hai catturato del traffico con una coda di due byte che sembra un checksum. Passa il payload e la coda alla ricerca inversa e guarda quale variante se la prende.
Portare firmware tra toolchain diverse
La libreria del fornitore e la tua implementazione non concordano. Confrontarle entrambe con il valore di verifica del catalogo mostra quale delle due è andata alla deriva.
Scrivere o revisionare una specifica
Scrivere «CRC-16» in un documento di protocollo garantisce bug di interoperabilità. La tabella dei parametri ti dà i sei valori che inchiodano davvero l'algoritmo.
Verificare dati memorizzati
Filesystem, formati di archivio e immagini flash portano campi CRC-32. Ricalcolarne uno ti dice se un blocco è arrivato intatto.

Come funziona il CRC

Rappresentazione del polinomio
La tabella stampa i polinomi in forma normale (MSB per primo): 0x8005 significa x^16 + x^15 + x^2 + 1. Le implementazioni riflesse mostrano spesso lo stesso polinomio come 0xA001, e la notazione di Koopman lo trasla ancora diversamente. Tre notazioni per un solo polinomio sono una causa ricorrente di porting falliti.
Il valore iniziale
Far partire il registro da 0xFFFF invece che da 0x0000 rende il checksum sensibile ai byte zero iniziali. Con init a zero, anteporre degli zeri a un messaggio lascia il CRC invariato — ed è esattamente la corruzione che un protocollo a trame deve intercettare.
Riflessione
refin inverte i bit dentro ogni byte in ingresso, refout inverte il registro finale. L'hardware fa scorrere i bit con l'MSB per primo, mentre il software orientato ai byte trova più economico l'LSB per primo, e le forme riflesse dei parametri conciliano i due mondi.
XOR finale
xorout viene applicato per ultimo, e non è semplicemente un init messo all'altro capo. I byte zero aggiunti in coda al messaggio vengono rilevati in entrambi i casi. Quello che un xorout diverso da zero cambia è il residuo che ottiene un ricevitore quando fa passare il CRC su messaggio e checksum insieme: con xorout a zero quel residuo è a sua volta zero, così gli zeri aggiunti dopo il campo CRC passano ancora. Fa anche sì che il messaggio tutto zeri produca un checksum diverso da zero.
Il valore di verifica
Ogni variante catalogata pubblica il proprio risultato per la stringa ASCII 123456789. I 63 valori mostrati in questa pagina quando si carica quell'input sono esattamente quelle costanti pubblicate, ed è così che il motore di questa pagina viene testato.

Come far tornare il risultato

Nomina i parametri, non l'algoritmo
Nelle specifiche scrivi «poly 0x1021, init 0xFFFF, refin false, refout false, xorout 0x0000». «CRC-16/CCITT» ha voluto dire almeno tre cose diverse.
Verifica l'ordine dei byte a parte
Quando a un checksum manca solo uno scambio di byte per tornare, l'algoritmo è giusto e la trama è sbagliata. Trattali come due bug distinti.
Valida prima contro il valore di verifica
Prima di indagare sui tuoi dati, conferma che la tua implementazione restituisca il valore del catalogo per 123456789. In pochi secondi separa un algoritmo rotto da un input rotto.
Sii esplicito su che cosa viene coperto
La maggior parte delle discrepanze nasce dall'includere o escludere marcatori di inizio, indirizzi o campi di lunghezza. Decidi con precisione quali byte copre il CRC e mettilo per iscritto.
Non usare il CRC dove serve un MAC
Il CRC è lineare e falsificabile senza sforzo. Se un avversario potesse modificare i dati, usa invece HMAC.

Domande frequenti

Perché il mio dispositivo restituisce un CRC diverso da questo calcolatore?
Quasi sempre perché stai confrontando due varianti diverse. Il solo CRC-16 conta 31 set di parametri catalogati, e MODBUS, CCITT-FALSE, XMODEM e KERMIT producono quattro numeri scorrelati a partire dagli stessi byte. Metti il valore del dispositivo nel campo del valore atteso: se una variante lo riproduce, la riga corrispondente viene evidenziata e hai la tua risposta. Se non corrisponde nulla, i dati su cui stai calcolando non sono quelli che credi — controlla l'ordine dei byte e verifica se i marcatori di inizio e fine trama rientrano nel calcolo.
Quale CRC-16 usa Modbus?
CRC-16/MODBUS: polinomio 0x8005, valore iniziale 0xFFFF, ingresso e uscita entrambi riflessi, nessuno XOR finale. La confusione più frequente riguarda l'ordine di trasmissione più che l'algoritmo — Modbus RTU invia per primo il byte basso del CRC, quindi una trama il cui CRC è 0xCDC5 porta in coda i byte C5 CD. Nella guida alle varianti CRC-16 trovi una trama sviluppata passo per passo.
Che differenza c'è tra CRC-16/CCITT e CRC-16/CCITT-FALSE?
Sono algoritmi diversi con nomi confusamente simili, ed è proprio per questo che il catalogo RevEng li ha rinominati entrambi. Quello che tutti chiamano CCITT-FALSE è CRC-16/IBM-3740: valore iniziale 0xFFFF, nessuna riflessione. Quello che di solito si intende per CCITT semplice è CRC-16/KERMIT: valore iniziale 0x0000, ingresso e uscita riflessi. Questo calcolatore mostra sia il nome formale sia quello che con ogni probabilità userà il manuale del tuo dispositivo.
Il CRC può rilevare che un file è stato manomesso?
No. Il CRC è un codice di rilevazione d'errore pensato per la corruzione accidentale su un canale rumoroso, ed è lineare: chiunque può modificare un messaggio e aggiustarlo in modo che il CRC continui a tornare. Per l'integrità contro un attaccante deliberato serve una funzione di hash crittografica come SHA-256, oppure una costruzione autenticata come HMAC. Il CRC è eccellente per ciò per cui è stato costruito e non offre alcuna sicurezza.
Che cosa fanno davvero refin e refout?
refin inverte l'ordine dei bit dentro ogni byte in ingresso prima che venga dato in pasto al registro; refout inverte l'ordine dei bit del registro finale. Esistono perché i registri a scorrimento hardware e le implementazioni software a tabella fanno scorrere i bit in direzioni opposte, e le forme riflesse permettono a entrambi di arrivare allo stesso numero. Non sono la stessa cosa dell'ordine dei byte: la riflessione agisce sui bit dentro un byte, mentre l'endianness decide l'ordine dei byte stessi.
Ho solo il checksum, non i dati. Lo strumento può lavorare a ritroso?
No, e nessuno strumento può farlo. Un CRC comprime un messaggio di lunghezza arbitraria in 8, 16 o 32 bit, quindi innumerevoli messaggi diversi condividono uno stesso valore: non è una questione di impegno. La ricerca inversa di questa pagina risponde a una domanda più stretta: avendo i dati e un checksum che qualcuno ha calcolato da essi, quale set di parametri collega i due. Se hai catturato la risposta di un dispositivo ma non il payload che c'è dietro, cattura prima il payload. Per scegliere fra le larghezze anziché identificare una variante, vedi la guida alle varianti CRC-16.
Perché il calcolatore mostra 63 varianti se il mio dispositivo ne dichiara una sola?
Perché la domanda utile di solito non è «calcola un CRC» ma «quale di queste ha prodotto il valore che ho in mano». Gli strumenti che ti obbligano a scegliere prima la variante danno per scontato che tu conosca già la risposta. Mostrarle tutte insieme riduce l'identificazione a una singola consultazione, e le colonne dei parametri ti permettono di confermare la corrispondenza contro la specifica invece di fidarti di un nome.
I miei dati vengono inviati da qualche parte?
No. L'intero calcolo gira nel tuo browser con lo stesso motore che ha generato la tabella di questa pagina: nessun caricamento, nessuna chiamata ad API, nessun log. Puoi scollegarti dalla rete e lo strumento continua a funzionare, il che conta perché gli input dei CRC sono spesso trame di produzione o immagini di firmware.

Strumenti correlati

Vedi tutti gli strumenti →