SIM-03 CRC - Simulatore Divisione Polinomiale XOR | Corso Tech 2026
PROF GIAGNOTTI · TORNA A → · GUIDE SIMULATORE • CONTROLLI DI INTEGRITÀ

SIM-03 CRC: Cyclic Redundancy Check

Simula il calcolo CRC più usato nelle reti Ethernet, USB e ZIP: divisione modulo-2 (XOR), polinomio generatore, resto e messaggio trasmesso.

⚡ Livello: Intermedio ⏱ 15 min 🧩 XOR + Polinomio 🔗 Collegamento alla teoria
Docente Prof. Giagnotti • Corso Tecnico 2026 • Modulo Controllo Errori
Obiettivi di apprendimento – 5 traguardi
  1. Capire cos'è il CRC e perché è più robusto di parità e checksum.
  2. Applicare la divisione polinomiale modulo-2 (sottrazione = XOR).
  3. Calcolare il resto = CRC dati polinomio generatore G(x).
  4. Costruire il frame trasmesso: dati originali + CRC.
  5. Riconoscere quali errori il CRC rileva e quando fallisce.

1. Che cos'è il CRC – Cyclic Redundancy Check

Il CRC è l'algoritmo di rilevazione errori standard nelle telecomunicazioni. Non corregge, ma rileva con probabilità altissima burst error, errori singoli, doppi e dispari.

Definizione formale

CRC = resto della divisione modulo-2 del messaggio M(x)·xⁿ per il polinomio generatore G(x). Grado di G = n → CRC di n bit. Trasmissione = M(x)·xⁿ + CRC(x) divisibile per G(x).

A differenza della parità (1 bit) e del checksum (somma), il CRC tratta il flusso di bit come un polinomio binario su campo GF(2).

Messaggio M 110100111 × xⁿ + ÷ G G=1101 n=3 Resto CRC=001 Trasmesso M+CRC

2. Come funziona – Divisione polinomiale XOR

  1. Scegli G(x) di grado r → CRC sarà di r bit. G deve iniziare e finire con 1.
  2. Aggiungi r zeri al messaggio: M·2ʳ.
  3. Dividi con XOR: scorri bit, se bit corrente =1 fai XOR con G allineato.
  4. Il resto di r bit è il CRC.
  5. Messaggio finale = M + CRC esattamente divisibile per G.
Fase 1

Padding

M = 110100111, G=1101 (r=3) → dividendo 110100111000

Fase 2

XOR iterativo

Per ogni 1 più a sinistra, XOR con G. No prestiti, solo XOR.

Fase 3

Resto

Ultimi r bit non divisibili → CRC. Se 000 = nessuna modifica.

CaratteristicaParitàChecksumCRC
Overhead1 bit8 bitr bit (tipico 8/16/32)
Singolo bit errato✅✅✅
Doppio bit errato❌⚠️ forse✅ con G adeguato
Burst error < r❌❌✅ 100%
StandardUARTTCP headerEthernet, ZIP, PNG, USB
Dritta docente

I CRC più usati: CRC-8 (ATM), CRC-16-CCITT (Bluetooth), CRC-32 (Ethernet/ZIP/PNG). Il polinomio non si sceglie a caso: 100000100110000010001110110110111 è CRC-32 IEEE.

3. Simulatore interattivo CRC

Modifica messaggio e polinomio. Il simulatore mostra divisione passo-passo, resto, frame trasmesso e verifica immediata.

SIM-03 • Cyclic Redundancy Check – crcInput
r = 3 bit
Inserisci dati e premi Calcola…
JS • Algoritmo CRC base
function crc(dividend, divisor) { // dividend = M + r zeri , divisor = G let rem = dividend.map(b=>+b); let div = divisor.map(b=>+b); for (let i=0; i<= dividend.length-div.length; i++) { if (rem[i]===1) { for (let j=0; j<div.length; j++) rem[i+j] ^= div[j]; // XOR = sottrazione GF(2) } } return rem.slice(-(div.length-1)); // ultimi r bit = CRC }

4. Esempio pratico passo-passo

Input: M=110100111, G=1101 (x³+x²+1), r=3

Padding: 110100111000

Divisione
110100111000 ÷ 1101
1101 → XOR → 0001 00111000
Scorri fino a 1 → XOR iterativo
Iterando → resto 001

Trasmette: 110100111 + 001 = 110100111001
Verifica ricevitore: 110100111001 ÷ 1101 → resto 000 → OK

Se il resto fosse diverso da zero → frame scartato, richiesta ritrasmissione.

5. Errori rilevabili, errori comuni e limiti

Rileva sicuro

Burst < r

Tutti gli errori a raffica più corti del grado di G rilevati al 100%.

Rileva sicuro

Errori dispari

Se G ha numero pari di 1, tutti gli errori dispari vengono rilevati.

Probabilistico

Burst ≥ r

Rileva con probabilità 1-2⁻ʳ. Con CRC-32: 99.99999998%.

⚠️ Errori comuni studenti
  • Polinomio non validato: G deve iniziare con 1.
  • Confondere somma con XOR: in GF(2) non esiste riporto, 1+1=0.
  • Dimenticare padding: devi aggiungere r zeri prima di dividere.
  • CRC calcolato solo su payload: va calcolato su header + payload.
  • Pensare che corregga: CRC solo rileva.
Tip laboratorio

Simula un errore: trasmetti 110100111001, poi flippa un bit a caso (es: 110100101001) e rilancia Verifica ricezione. Il resto ≠ 0 → errore rilevato. Prova con 2 bit → spesso rilevato, con polinomio debole a volte no.

6. Verifica comprensione + Riepilogo

Mini quiz

1. Con G=1011 (r=3), M=1100 → qual è il dividendo padded?
Risposta: 1100 + 000 = 1100000

2. Se G=1101, burst error di 2 bit è sempre rilevato?
Sì, qualsiasi burst <3 è garantito.

3. Perché Ethernet usa CRC-32 e non parità?
Burst error sui cavi lunghi; CRC-32 ha probabilità mancato rilevamento = 2⁻³².

✅ Riepilogo SIM-03

CRC = resto divisione modulo-2 per G(x). Formula: T(x)=M(x)·xʳ + CRC(x) divisibile per G(x). Più costoso di parità/checksum, ma rileva praticamente tutti gli errori reali. Usato ovunque nell'informatica moderna.

Formula: CRC = resto[ (M·2ʳ) / G ] Overhead = grado G Detezione = XOR seriale