UNPKG

@taichunmin/crc

Version:

A cross platform alternative for calculating Cyclic Redundancy Checks (CRC) values.

52 lines (48 loc) 2.63 kB
import { setObject, u16 } from './common2' const POLY_TABLE = new Uint16Array([ 0x0000, 0xC867, 0x58A9, 0x90CE, 0xB152, 0x7935, 0xE9FB, 0x219C, 0xAAC3, 0x62A4, 0xF26A, 0x3A0D, 0x1B91, 0xD3F6, 0x4338, 0x8B5F, 0x9DE1, 0x5586, 0xC548, 0x0D2F, 0x2CB3, 0xE4D4, 0x741A, 0xBC7D, 0x3722, 0xFF45, 0x6F8B, 0xA7EC, 0x8670, 0x4E17, 0xDED9, 0x16BE, 0xF3A5, 0x3BC2, 0xAB0C, 0x636B, 0x42F7, 0x8A90, 0x1A5E, 0xD239, 0x5966, 0x9101, 0x01CF, 0xC9A8, 0xE834, 0x2053, 0xB09D, 0x78FA, 0x6E44, 0xA623, 0x36ED, 0xFE8A, 0xDF16, 0x1771, 0x87BF, 0x4FD8, 0xC487, 0x0CE0, 0x9C2E, 0x5449, 0x75D5, 0xBDB2, 0x2D7C, 0xE51B, 0x2F2D, 0xE74A, 0x7784, 0xBFE3, 0x9E7F, 0x5618, 0xC6D6, 0x0EB1, 0x85EE, 0x4D89, 0xDD47, 0x1520, 0x34BC, 0xFCDB, 0x6C15, 0xA472, 0xB2CC, 0x7AAB, 0xEA65, 0x2202, 0x039E, 0xCBF9, 0x5B37, 0x9350, 0x180F, 0xD068, 0x40A6, 0x88C1, 0xA95D, 0x613A, 0xF1F4, 0x3993, 0xDC88, 0x14EF, 0x8421, 0x4C46, 0x6DDA, 0xA5BD, 0x3573, 0xFD14, 0x764B, 0xBE2C, 0x2EE2, 0xE685, 0xC719, 0x0F7E, 0x9FB0, 0x57D7, 0x4169, 0x890E, 0x19C0, 0xD1A7, 0xF03B, 0x385C, 0xA892, 0x60F5, 0xEBAA, 0x23CD, 0xB303, 0x7B64, 0x5AF8, 0x929F, 0x0251, 0xCA36, 0x5E5A, 0x963D, 0x06F3, 0xCE94, 0xEF08, 0x276F, 0xB7A1, 0x7FC6, 0xF499, 0x3CFE, 0xAC30, 0x6457, 0x45CB, 0x8DAC, 0x1D62, 0xD505, 0xC3BB, 0x0BDC, 0x9B12, 0x5375, 0x72E9, 0xBA8E, 0x2A40, 0xE227, 0x6978, 0xA11F, 0x31D1, 0xF9B6, 0xD82A, 0x104D, 0x8083, 0x48E4, 0xADFF, 0x6598, 0xF556, 0x3D31, 0x1CAD, 0xD4CA, 0x4404, 0x8C63, 0x073C, 0xCF5B, 0x5F95, 0x97F2, 0xB66E, 0x7E09, 0xEEC7, 0x26A0, 0x301E, 0xF879, 0x68B7, 0xA0D0, 0x814C, 0x492B, 0xD9E5, 0x1182, 0x9ADD, 0x52BA, 0xC274, 0x0A13, 0x2B8F, 0xE3E8, 0x7326, 0xBB41, 0x7177, 0xB910, 0x29DE, 0xE1B9, 0xC025, 0x0842, 0x988C, 0x50EB, 0xDBB4, 0x13D3, 0x831D, 0x4B7A, 0x6AE6, 0xA281, 0x324F, 0xFA28, 0xEC96, 0x24F1, 0xB43F, 0x7C58, 0x5DC4, 0x95A3, 0x056D, 0xCD0A, 0x4655, 0x8E32, 0x1EFC, 0xD69B, 0xF707, 0x3F60, 0xAFAE, 0x67C9, 0x82D2, 0x4AB5, 0xDA7B, 0x121C, 0x3380, 0xFBE7, 0x6B29, 0xA34E, 0x2811, 0xE076, 0x70B8, 0xB8DF, 0x9943, 0x5124, 0xC1EA, 0x098D, 0x1F33, 0xD754, 0x479A, 0x8FFD, 0xAE61, 0x6606, 0xF6C8, 0x3EAF, 0xB5F0, 0x7D97, 0xED59, 0x253E, 0x04A2, 0xCCC5, 0x5C0B, 0x946C, ]) /** * - poly: 0xC867 * - initial: 0xFFFF * - xorout: 0x0000 * - refin: false * - refout: false */ export default function crc16cdma2000 (buf: Uint8Array = new Uint8Array(), prev: number = 0xFFFF): number { u16[0] = prev // revert of refout and xorout for (const b of buf) u16[0] = POLY_TABLE[(u16[0] >>> 8) ^ b] ^ (u16[0] << 8) return u16[0] } setObject(globalThis, ['taichunmin', 'crc', 'crc16cdma2000'], crc16cdma2000)