Skip to main content
CRC Calc

CRC-16 / IBM-SDLC

Width16-bitRefInYesRefOutYes

Need custom parameters? Open in full calculator

Standard test string

Result

0x906E

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

0x00000x11890x23120x329B0x46240x57AD0x65360x74BF0x8C480x9DC10xAF5A0xBED30xCA6C0xDBE50xE97E0xF8F7
0x10810x01080x33930x221A0x56A50x472C0x75B70x643E0x9CC90x8D400xBFDB0xAE520xDAED0xCB640xF9FF0xE876
0x21020x308B0x02100x13990x67260x76AF0x44340x55BD0xAD4A0xBCC30x8E580x9FD10xEB6E0xFAE70xC87C0xD9F5
0x31830x200A0x12910x03180x77A70x662E0x54B50x453C0xBDCB0xAC420x9ED90x8F500xFBEF0xEA660xD8FD0xC974
0x42040x538D0x61160x709F0x04200x15A90x27320x36BB0xCE4C0xDFC50xED5E0xFCD70x88680x99E10xAB7A0xBAF3
0x52850x430C0x71970x601E0x14A10x05280x37B30x263A0xDECD0xCF440xFDDF0xEC560x98E90x89600xBBFB0xAA72
0x63060x728F0x40140x519D0x25220x34AB0x06300x17B90xEF4E0xFEC70xCC5C0xDDD50xA96A0xB8E30x8A780x9BF1
0x73870x620E0x50950x411C0x35A30x242A0x16B10x07380xFFCF0xEE460xDCDD0xCD540xB9EB0xA8620x9AF90x8B70
0x84080x95810xA71A0xB6930xC22C0xD3A50xE13E0xF0B70x08400x19C90x2B520x3ADB0x4E640x5FED0x6D760x7CFF
0x94890x85000xB79B0xA6120xD2AD0xC3240xF1BF0xE0360x18C10x09480x3BD30x2A5A0x5EE50x4F6C0x7DF70x6C7E
0xA50A0xB4830x86180x97910xE32E0xF2A70xC03C0xD1B50x29420x38CB0x0A500x1BD90x6F660x7EEF0x4C740x5DFD
0xB58B0xA4020x96990x87100xF3AF0xE2260xD0BD0xC1340x39C30x284A0x1AD10x0B580x7FE70x6E6E0x5CF50x4D7C
0xC60C0xD7850xE51E0xF4970x80280x91A10xA33A0xB2B30x4A440x5BCD0x69560x78DF0x0C600x1DE90x2F720x3EFB
0xD68D0xC7040xF59F0xE4160x90A90x81200xB3BB0xA2320x5AC50x4B4C0x79D70x685E0x1CE10x0D680x3FF30x2E7A
0xE70E0xF6870xC41C0xD5950xA12A0xB0A30x82380x93B10x6B460x7ACF0x48540x59DD0x2D620x3CEB0x0E700x1FF9
0xF78F0xE6060xD49D0xC5140xB1AB0xA0220x92B90x83300x7BC70x6A4E0x58D50x495C0x3DE30x2C6A0x1EF10x0F78

CRC Source Code

/* 
 * Model: CRC-16 / IBM-SDLC (16-bit)
 * Poly: 0x1021, Init: 0xFFFF, XorOut: 0xFFFF
 * CRC Table C Source Code & Lookup Table Generator
 */
#include <stdint.h>
#include <stddef.h>

const uint16_t crc_table[256] = {
  0x0000, 0x1189, 0x2312, 0x329B, 0x4624, 0x57AD, 0x6536, 0x74BF, 
  0x8C48, 0x9DC1, 0xAF5A, 0xBED3, 0xCA6C, 0xDBE5, 0xE97E, 0xF8F7, 
  0x1081, 0x0108, 0x3393, 0x221A, 0x56A5, 0x472C, 0x75B7, 0x643E, 
  0x9CC9, 0x8D40, 0xBFDB, 0xAE52, 0xDAED, 0xCB64, 0xF9FF, 0xE876, 
  0x2102, 0x308B, 0x0210, 0x1399, 0x6726, 0x76AF, 0x4434, 0x55BD, 
  0xAD4A, 0xBCC3, 0x8E58, 0x9FD1, 0xEB6E, 0xFAE7, 0xC87C, 0xD9F5, 
  0x3183, 0x200A, 0x1291, 0x0318, 0x77A7, 0x662E, 0x54B5, 0x453C, 
  0xBDCB, 0xAC42, 0x9ED9, 0x8F50, 0xFBEF, 0xEA66, 0xD8FD, 0xC974, 
  0x4204, 0x538D, 0x6116, 0x709F, 0x0420, 0x15A9, 0x2732, 0x36BB, 
  0xCE4C, 0xDFC5, 0xED5E, 0xFCD7, 0x8868, 0x99E1, 0xAB7A, 0xBAF3, 
  0x5285, 0x430C, 0x7197, 0x601E, 0x14A1, 0x0528, 0x37B3, 0x263A, 
  0xDECD, 0xCF44, 0xFDDF, 0xEC56, 0x98E9, 0x8960, 0xBBFB, 0xAA72, 
  0x6306, 0x728F, 0x4014, 0x519D, 0x2522, 0x34AB, 0x0630, 0x17B9, 
  0xEF4E, 0xFEC7, 0xCC5C, 0xDDD5, 0xA96A, 0xB8E3, 0x8A78, 0x9BF1, 
  0x7387, 0x620E, 0x5095, 0x411C, 0x35A3, 0x242A, 0x16B1, 0x0738, 
  0xFFCF, 0xEE46, 0xDCDD, 0xCD54, 0xB9EB, 0xA862, 0x9AF9, 0x8B70, 
  0x8408, 0x9581, 0xA71A, 0xB693, 0xC22C, 0xD3A5, 0xE13E, 0xF0B7, 
  0x0840, 0x19C9, 0x2B52, 0x3ADB, 0x4E64, 0x5FED, 0x6D76, 0x7CFF, 
  0x9489, 0x8500, 0xB79B, 0xA612, 0xD2AD, 0xC324, 0xF1BF, 0xE036, 
  0x18C1, 0x0948, 0x3BD3, 0x2A5A, 0x5EE5, 0x4F6C, 0x7DF7, 0x6C7E, 
  0xA50A, 0xB483, 0x8618, 0x9791, 0xE32E, 0xF2A7, 0xC03C, 0xD1B5, 
  0x2942, 0x38CB, 0x0A50, 0x1BD9, 0x6F66, 0x7EEF, 0x4C74, 0x5DFD, 
  0xB58B, 0xA402, 0x9699, 0x8710, 0xF3AF, 0xE226, 0xD0BD, 0xC134, 
  0x39C3, 0x284A, 0x1AD1, 0x0B58, 0x7FE7, 0x6E6E, 0x5CF5, 0x4D7C, 
  0xC60C, 0xD785, 0xE51E, 0xF497, 0x8028, 0x91A1, 0xA33A, 0xB2B3, 
  0x4A44, 0x5BCD, 0x6956, 0x78DF, 0x0C60, 0x1DE9, 0x2F72, 0x3EFB, 
  0xD68D, 0xC704, 0xF59F, 0xE416, 0x90A9, 0x8120, 0xB3BB, 0xA232, 
  0x5AC5, 0x4B4C, 0x79D7, 0x685E, 0x1CE1, 0x0D68, 0x3FF3, 0x2E7A, 
  0xE70E, 0xF687, 0xC41C, 0xD595, 0xA12A, 0xB0A3, 0x8238, 0x93B1, 
  0x6B46, 0x7ACF, 0x4854, 0x59DD, 0x2D62, 0x3CEB, 0x0E70, 0x1FF9, 
  0xF78F, 0xE606, 0xD49D, 0xC514, 0xB1AB, 0xA022, 0x92B9, 0x8330, 
  0x7BC7, 0x6A4E, 0x58D5, 0x495C, 0x3DE3, 0x2C6A, 0x1EF1, 0x0F78
};

uint16_t calculate_crc(const uint8_t *data, size_t length) {
    uint16_t crc = 0xFFFF;
    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 >> 8) ^ data[i]);
        crc = (crc << 8) ^ crc_table[idx];
        #endif
    }
    return crc ^ 0xFFFF;
}

About CRC-16/IBM-SDLC

CRC-16/IBM-SDLC is the reflected 0x1021 model also widely known as CRC-16/X-25.

CRC-16/IBM-SDLC is a 16-bit CRC model defined by polynomial 0x1021, an initial register value of 0xFFFF, and final XOR 0xFFFF. It processes reflected input bytes and reports a reflected output.

Documented application context for this model includes HDLC, X.25, Data links. 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
0x906E
Residue
0xF0B8

Model characteristics

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

Bit order
Reflected
Register start
0xFFFF
Final XOR
0xFFFF
Published check
0x906E

Implementation checks for CRC-16/IBM-SDLC

  • Use a 16-bit register and polynomial 0x1021.
  • Initialize the register to 0xFFFF and use XorOut 0xFFFF exactly as listed; changing either value defines a different model.
  • Verify the implementation with ASCII “123456789”; the expected result is 0x906E.

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

Complete CRC-16/IBM-SDLC parameters

CRC parameter guide
ParameterValueMeaningReference
Width16 bitsCRC register and result widthRead guide
Poly0x1021Generator polynomial without the leading termRead guide
Init0xFFFFInitial CRC register valueRead guide
RefInYesReflect each input byte before processingRead guide
RefOutYesReflect the register before XOR OutRead guide
XorOut0xFFFFFinal value XORed with the CRC registerRead guide
Check0x906ECRC of ASCII “123456789”Read guide
Residue0xF0B8Expected residue after appending a valid CRCRead guide
AliasesCRC-16/ISO-HDLCCRC-16/ISO-IEC-14443-3-BCRC-16/X-25CRC-BX-25

Where CRC-16/IBM-SDLC is used

  • 01HDLC
  • 02X.25
  • 03Data links

CRC-16/IBM-SDLC FAQ

What is the check value for CRC-16/IBM-SDLC?

For the standard ASCII test input 123456789, the check value of CRC-16/IBM-SDLC is 0x906E.

What polynomial does CRC-16/IBM-SDLC use?

CRC-16/IBM-SDLC uses the 16-bit polynomial 0x1021.

Does CRC-16/IBM-SDLC use reflected input and output?

For CRC-16/IBM-SDLC, RefIn is Yes and RefOut is Yes.

What is CRC-16/IBM-SDLC commonly confused with?

CRC-16/MCRF4XX uses the same polynomial (0x1021), which is the usual source of mix-ups — matching the polynomial alone does not reproduce CRC-16/IBM-SDLC. The two models differ in final XOR value, so a port from one to the other needs those fields checked explicitly, not just the poly.