Skip to main content
CRC Calc

CRC-8 / ROHC

Width8-bitRefInYesRefOutYes

Need custom parameters? Open in full calculator

Standard test string

Result

0xD0

Similar CRC Algorithms

Result is calculated from the current input. Check is the published verification value for the standard input 123456789. Click another algorithm to view its detail page.

CRC Lookup Table

0x000x910xE30x720x070x960xE40x750x0E0x9F0xED0x7C0x090x980xEA0x7B
0x1C0x8D0xFF0x6E0x1B0x8A0xF80x690x120x830xF10x600x150x840xF60x67
0x380xA90xDB0x4A0x3F0xAE0xDC0x4D0x360xA70xD50x440x310xA00xD20x43
0x240xB50xC70x560x230xB20xC00x510x2A0xBB0xC90x580x2D0xBC0xCE0x5F
0x700xE10x930x020x770xE60x940x050x7E0xEF0x9D0x0C0x790xE80x9A0x0B
0x6C0xFD0x8F0x1E0x6B0xFA0x880x190x620xF30x810x100x650xF40x860x17
0x480xD90xAB0x3A0x4F0xDE0xAC0x3D0x460xD70xA50x340x410xD00xA20x33
0x540xC50xB70x260x530xC20xB00x210x5A0xCB0xB90x280x5D0xCC0xBE0x2F
0xE00x710x030x920xE70x760x040x950xEE0x7F0x0D0x9C0xE90x780x0A0x9B
0xFC0x6D0x1F0x8E0xFB0x6A0x180x890xF20x630x110x800xF50x640x160x87
0xD80x490x3B0xAA0xDF0x4E0x3C0xAD0xD60x470x350xA40xD10x400x320xA3
0xC40x550x270xB60xC30x520x200xB10xCA0x5B0x290xB80xCD0x5C0x2E0xBF
0x900x010x730xE20x970x060x740xE50x9E0x0F0x7D0xEC0x990x080x7A0xEB
0x8C0x1D0x6F0xFE0x8B0x1A0x680xF90x820x130x610xF00x850x140x660xF7
0xA80x390x4B0xDA0xAF0x3E0x4C0xDD0xA60x370x450xD40xA10x300x420xD3
0xB40x250x570xC60xB30x220x500xC10xBA0x2B0x590xC80xBD0x2C0x5E0xCF

CRC Source Code

/* 
 * Model: CRC-8 / ROHC (8-bit)
 * Poly: 0x07, Init: 0xFF, XorOut: 0x00
 * CRC Table C Source Code & Lookup Table Generator
 */
#include <stdint.h>
#include <stddef.h>

const uint8_t crc_table[256] = {
  0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 
  0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B, 
  0x1C, 0x8D, 0xFF, 0x6E, 0x1B, 0x8A, 0xF8, 0x69, 
  0x12, 0x83, 0xF1, 0x60, 0x15, 0x84, 0xF6, 0x67, 
  0x38, 0xA9, 0xDB, 0x4A, 0x3F, 0xAE, 0xDC, 0x4D, 
  0x36, 0xA7, 0xD5, 0x44, 0x31, 0xA0, 0xD2, 0x43, 
  0x24, 0xB5, 0xC7, 0x56, 0x23, 0xB2, 0xC0, 0x51, 
  0x2A, 0xBB, 0xC9, 0x58, 0x2D, 0xBC, 0xCE, 0x5F, 
  0x70, 0xE1, 0x93, 0x02, 0x77, 0xE6, 0x94, 0x05, 
  0x7E, 0xEF, 0x9D, 0x0C, 0x79, 0xE8, 0x9A, 0x0B, 
  0x6C, 0xFD, 0x8F, 0x1E, 0x6B, 0xFA, 0x88, 0x19, 
  0x62, 0xF3, 0x81, 0x10, 0x65, 0xF4, 0x86, 0x17, 
  0x48, 0xD9, 0xAB, 0x3A, 0x4F, 0xDE, 0xAC, 0x3D, 
  0x46, 0xD7, 0xA5, 0x34, 0x41, 0xD0, 0xA2, 0x33, 
  0x54, 0xC5, 0xB7, 0x26, 0x53, 0xC2, 0xB0, 0x21, 
  0x5A, 0xCB, 0xB9, 0x28, 0x5D, 0xCC, 0xBE, 0x2F, 
  0xE0, 0x71, 0x03, 0x92, 0xE7, 0x76, 0x04, 0x95, 
  0xEE, 0x7F, 0x0D, 0x9C, 0xE9, 0x78, 0x0A, 0x9B, 
  0xFC, 0x6D, 0x1F, 0x8E, 0xFB, 0x6A, 0x18, 0x89, 
  0xF2, 0x63, 0x11, 0x80, 0xF5, 0x64, 0x16, 0x87, 
  0xD8, 0x49, 0x3B, 0xAA, 0xDF, 0x4E, 0x3C, 0xAD, 
  0xD6, 0x47, 0x35, 0xA4, 0xD1, 0x40, 0x32, 0xA3, 
  0xC4, 0x55, 0x27, 0xB6, 0xC3, 0x52, 0x20, 0xB1, 
  0xCA, 0x5B, 0x29, 0xB8, 0xCD, 0x5C, 0x2E, 0xBF, 
  0x90, 0x01, 0x73, 0xE2, 0x97, 0x06, 0x74, 0xE5, 
  0x9E, 0x0F, 0x7D, 0xEC, 0x99, 0x08, 0x7A, 0xEB, 
  0x8C, 0x1D, 0x6F, 0xFE, 0x8B, 0x1A, 0x68, 0xF9, 
  0x82, 0x13, 0x61, 0xF0, 0x85, 0x14, 0x66, 0xF7, 
  0xA8, 0x39, 0x4B, 0xDA, 0xAF, 0x3E, 0x4C, 0xDD, 
  0xA6, 0x37, 0x45, 0xD4, 0xA1, 0x30, 0x42, 0xD3, 
  0xB4, 0x25, 0x57, 0xC6, 0xB3, 0x22, 0x50, 0xC1, 
  0xBA, 0x2B, 0x59, 0xC8, 0xBD, 0x2C, 0x5E, 0xCF
};

uint8_t calculate_crc(const uint8_t *data, size_t length) {
    uint8_t crc = 0xFF;
    for (size_t i = 0; i < length; i++) {
        #if 1
        uint8_t idx = (uint8_t)(crc ^ data[i]);
        crc = (crc >> 8) ^ crc_table[idx];
        #else
        uint8_t idx = (uint8_t)((crc >> 0) ^ data[i]);
        crc = (crc << 8) ^ crc_table[idx];
        #endif
    }
    return crc ^ 0x00;
}

About CRC-8/ROHC

CRC-8/ROHC is a reflected CRC used by Robust Header Compression.

CRC-8/ROHC is a 8-bit CRC model defined by polynomial 0x07, an initial register value of 0xFF, and final XOR 0x00. It processes reflected input bytes and reports a reflected output.

Documented application context for this model includes ROHC, IP header compression, Mobile networks. The calculator above applies this exact parameter set to the current input; the published Check value below is instead the fixed verification result for ASCII 123456789.

Standard test vector

CRC implementations are commonly verified with the ASCII input 123456789.

Input format
ASCII
Input
123456789
Expected CRC
0xD0
Residue
0x00

Model characteristics

A model is identified by its complete parameter set, not its polynomial alone.

Bit order
Reflected
Register start
0xFF
Final XOR
0x00
Published check
0xD0

Implementation checks for CRC-8/ROHC

  • Use a 8-bit register and polynomial 0x07.
  • Initialize the register to 0xFF and use XorOut 0x00 exactly as listed; changing either value defines a different model.
  • Verify the implementation with ASCII “123456789”; the expected result is 0xD0.

Continue with the main calculator, browse the algorithm catalog, compare models in the Algorithm Reference section, or generate a lookup table.

Complete CRC-8/ROHC parameters

CRC parameter guide
ParameterValueMeaningReference
Width8 bitsCRC register and result widthRead guide
Poly0x07Generator polynomial without the leading termRead guide
Init0xFFInitial CRC register valueRead guide
RefInYesReflect each input byte before processingRead guide
RefOutYesReflect the register before XOR OutRead guide
XorOut0x00Final value XORed with the CRC registerRead guide
Check0xD0CRC of ASCII “123456789”Read guide
Residue0x00Expected residue after appending a valid CRCRead guide
AliasesROHC CRC-8

Where CRC-8/ROHC is used

  • 01ROHC
  • 02IP header compression
  • 03Mobile networks

CRC-8/ROHC FAQ

What is the check value for CRC-8/ROHC?

For the standard ASCII test input 123456789, the check value of CRC-8/ROHC is 0xD0.

What polynomial does CRC-8/ROHC use?

CRC-8/ROHC uses the 8-bit polynomial 0x07.

Does CRC-8/ROHC use reflected input and output?

For CRC-8/ROHC, RefIn is Yes and RefOut is Yes.

What is CRC-8/ROHC commonly confused with?

CRC-8/SMBUS uses the same polynomial (0x07), which is the usual source of mix-ups — matching the polynomial alone does not reproduce CRC-8/ROHC. The two models differ in initial value, input reflection, and output reflection, so a port from one to the other needs those fields checked explicitly, not just the poly.