Skip to main content
CRC Calc

CRC-16 / MCRF4XX

Width16-bitRefInYesRefOutYes

Need custom parameters? Open in full calculator

Standard test string

Result

0x6F91

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 / MCRF4XX (16-bit)
 * Poly: 0x1021, Init: 0xFFFF, XorOut: 0x0000
 * 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 ^ 0x0000;
}

About CRC-16/MCRF4XX

CRC-16/MCRF4XX is used by Microchip RFID transponder products.

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

Documented application context for this model includes RFID, Microchip devices, Transponders. 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
0x6F91
Residue
0x0000

Model characteristics

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

Bit order
Reflected
Register start
0xFFFF
Final XOR
0x0000
Published check
0x6F91

Implementation checks for CRC-16/MCRF4XX

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

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

Complete CRC-16/MCRF4XX 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
XorOut0x0000Final value XORed with the CRC registerRead guide
Check0x6F91CRC of ASCII “123456789”Read guide
Residue0x0000Expected residue after appending a valid CRCRead guide
AliasesMCRF4XX CRC

Where CRC-16/MCRF4XX is used

  • 01RFID
  • 02Microchip devices
  • 03Transponders

CRC-16/MCRF4XX FAQ

What is the check value for CRC-16/MCRF4XX?

For the standard ASCII test input 123456789, the check value of CRC-16/MCRF4XX is 0x6F91.

What polynomial does CRC-16/MCRF4XX use?

CRC-16/MCRF4XX uses the 16-bit polynomial 0x1021.

Does CRC-16/MCRF4XX use reflected input and output?

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

What is CRC-16/MCRF4XX commonly confused with?

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