当前位置:首页 > JavaScript

js实现crc

2026-03-14 02:19:38JavaScript

CRC 实现方法(JavaScript)

CRC(Cyclic Redundancy Check)是一种常用的数据校验算法,以下提供几种 JavaScript 实现方式:

使用预计算表(查表法)

查表法是 CRC 计算的高效方式,适合处理大量数据:

function makeCRCTable() {
  const crcTable = [];
  for (let n = 0; n < 256; n++) {
    let c = n;
    for (let k = 0; k < 8; k++) {
      c = c & 1 ? 0xEDB88320 ^ (c >>> 1) : c >>> 1;
    }
    crcTable[n] = c;
  }
  return crcTable;
}

function crc32(str) {
  const crcTable = makeCRCTable();
  let crc = 0xFFFFFFFF;
  for (let i = 0; i < str.length; i++) {
    const byte = str.charCodeAt(i);
    crc = (crc >>> 8) ^ crcTable[(crc ^ byte) & 0xFF];
  }
  return (crc ^ 0xFFFFFFFF) >>> 0;
}

直接计算法(适用于小数据量)

不需要预计算表的简单实现:

function crc16(data) {
  let crc = 0xFFFF;
  for (let i = 0; i < data.length; i++) {
    crc ^= data.charCodeAt(i) << 8;
    for (let j = 0; j < 8; j++) {
      crc = crc & 0x8000 ? (crc << 1) ^ 0x1021 : crc << 1;
    }
  }
  return crc & 0xFFFF;
}

不同多项式配置

CRC 算法的核心区别在于多项式选择,常见配置:

  • CRC-8:多项式 0x07
  • CRC-16-CCITT:多项式 0x1021
  • CRC-32:多项式 0xEDB88320

修改多项式值即可实现不同标准:

// CRC-8 示例
function crc8(data) {
  let crc = 0;
  const poly = 0x07;
  for (const byte of data) {
    crc ^= byte;
    for (let i = 0; i < 8; i++) {
      crc = crc & 0x80 ? (crc << 1) ^ poly : crc << 1;
    }
  }
  return crc & 0xFF;
}

二进制数据处理

处理 ArrayBuffer 或 Uint8Array 数据:

js实现crc

function crc32Buffer(buffer) {
  const view = new Uint8Array(buffer);
  const crcTable = makeCRCTable();
  let crc = 0xFFFFFFFF;
  for (const byte of view) {
    crc = (crc >>> 8) ^ crcTable[(crc ^ byte) & 0xFF];
  }
  return (crc ^ 0xFFFFFFFF) >>> 0;
}

注意事项

  1. 初始值和输出异或值需根据具体 CRC 标准调整
  2. 大端序/小端序处理需与目标系统保持一致
  3. 字符串编码会影响计算结果(建议统一使用 UTF-8)
  4. 查表法比直接计算快约 8-10 倍

以上实现可根据具体需求调整多项式、初始值和最终异或值等参数。

标签: jscrc
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…