Connectez-vous via MCP →

Entrez le calcul

Formule

Publicité

Résultats

Somme de contrôle CRC (hex)
0x29B1
16-bit checksum
Valeur décimale 10 673
Largeur 16 bits
Octets traités 9

Qu'est-ce qu'une somme de contrôle CRC ?

Le contrôle de redondance cyclique (CRC, pour Cyclic Redundancy Check) est un code détecteur d'erreurs très répandu dans les réseaux, le stockage et de nombreux formats de fichiers (Ethernet, ZIP, PNG, Modbus, USB, etc.). Le principe : vos données sont considérées comme un grand nombre binaire, que l'on divise par un polynôme générateur fixe à l'aide d'une arithmétique binaire sans retenue (GF(2), où l'addition et la soustraction se résument toutes deux à un XOR). Le reste de cette division constitue le CRC. Si ne serait-ce qu'un seul bit du message change, le reste change presque toujours lui aussi : c'est précisément ce qui rend le CRC redoutablement efficace pour repérer les erreurs de transmission ou de stockage.

Schéma fonctionnel d'un message divisé en données plus un champ de somme de contrôle CRC ajouté
Un CRC ajoute une courte valeur de contrôle aux données pour permettre de détecter les erreurs.

Comment utiliser ce calculateur

Saisissez le texte ASCII de votre choix dans le champ prévu, sélectionnez la variante de CRC souhaitée, puis lisez le résultat. L'outil affiche la somme de contrôle à la fois en hexadécimal et en décimal, ainsi que la largeur en bits et le nombre d'octets traités. Trois variantes courantes sont prises en charge :

CRC-8 — polynôme \(\mathtt{0x07}\), valeur initiale \(\mathtt{0x00}\).
CRC-16/CCITT-FALSE — polynôme \(\mathtt{0x1021}\), valeur initiale \(\mathtt{0xFFFF}\), sans réflexion.
CRC-32 (IEEE 802.3) — polynôme réfléchi \(\mathtt{0xEDB88320}\), valeur initiale \(\mathtt{0xFFFFFFFF}\), XOR final \(\mathtt{0xFFFFFFFF}\). C'est la variante employée par ZIP, gzip et Ethernet.

$$\text{CRC} = \mathrm{XorOut} \oplus \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}_{\text{poly}}(\text{crc}, b)$$ $$\text{where (CRC-16/CCITT-FALSE)}\quad \left\{ \begin{aligned} \text{poly} &= \mathtt{0x1021} \\ \mathrm{init} &= \mathtt{0xFFFF} \\ \mathrm{XorOut} &= \mathtt{0x0000} \\ \text{width} &= 16 \text{ bits (MSB-first, no reflection)} \end{aligned} \right.$$

La formule expliquée

Sur le plan conceptuel, le message \(M(x)\) est multiplié par \(x^n\) (où \(n\) est le degré du générateur), puis divisé par \(G(x)\). En pratique, on utilise un registre que l'on décale bit par bit, en y appliquant un XOR avec le polynôme dès que le bit de tête vaut 1. Les variantes réfléchies (comme le CRC-32) traitent les bits en commençant par le bit de poids faible et décalent vers la droite plutôt que vers la gauche.

$$\text{CRC}_{16} = \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}(\text{crc}, b)$$ $$\text{where}\quad \left\{ \begin{aligned} \mathrm{init} &= \mathtt{0xFFFF} \\ \text{poly} &= \mathtt{0x1021} \\ \text{step} &: \text{crc} \leftarrow \big(\text{crc} \ll 1\big) \oplus (\text{MSB}?\,\text{poly}:0) \\ \text{width} &= 16 \text{ bits, MSB-first} \end{aligned} \right.$$ $$\text{CRC}_{8} = \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}(\text{crc}, b)$$ $$\text{where}\quad \left\{ \begin{aligned} \mathrm{init} &= \mathtt{0x00} \\ \text{poly} &= \mathtt{0x07} \\ \text{step} &: \text{crc} \leftarrow \big(\text{crc} \ll 1\big) \oplus (\text{MSB}?\,\text{poly}:0) \\ \text{width} &= 8 \text{ bits, MSB-first} \end{aligned} \right.$$ $$\text{CRC}_{32} = \mathtt{0xFFFFFFFF} \oplus \bigoplus_{b \in \text{Message bytes}} \mathrm{Update}(\text{crc}, b)$$ $$\text{where}\quad \left\{ \begin{aligned} \mathrm{init} &= \mathtt{0xFFFFFFFF} \\ \text{poly} &= \mathtt{0xEDB88320}\ (\text{reflected}) \\ \text{step} &: \text{crc} \leftarrow \big(\text{crc} \gg 1\big) \oplus (\text{LSB}?\,\text{poly}:0) \\ \text{width} &= 32 \text{ bits, LSB-first} \end{aligned} \right.$$

Division longue polynomiale des bits du message par le polynôme générateur sur GF(2) avec des étapes XOR
Le CRC est le reste de la division polynomiale binaire (XOR) du message par le générateur \(G(x)\).

Exemple concret

Pour la chaîne de vérification classique 123456789 : le CRC-16/CCITT-FALSE renvoie 0x29B1 (soit 10673 en décimal), et le CRC-32/IEEE renvoie 0xCBF43926 (soit 3421780262 en décimal). Ce sont les valeurs « check » standard publiées dans les catalogues de référence sur le CRC : vous pouvez donc vérifier n'importe quelle implémentation en les comparant à ces résultats.

FAQ

Pourquoi mon résultat diffère-t-il de celui d'un autre outil ? Les variantes de CRC se distinguent par leur polynôme, leur valeur initiale, la réflexion des bits et le XOR final. Assurez-vous de comparer exactement la même variante.

Le CRC est-il un hachage sécurisé ? Non. Le CRC détecte les erreurs accidentelles, mais il est trivial à falsifier de manière intentionnelle. Pour la sécurité, utilisez SHA-256 ou un algorithme équivalent.

Quel encodage est utilisé ? Chaque caractère est pris comme sa valeur d'octet ASCII/Latin-1 sur 8 bits avant le calcul du CRC.

Dernière mise à jour: