当前位置:首页 > JavaScript

js实现crc

2026-03-14 02:19:38JavaScript

CRC 实现方法(JavaScript)

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

使用预计算表(查表法)

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

js实现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 算法的核心区别在于多项式选择,常见配置:

js实现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 数据:

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实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…