最近做项目时,一直在用crc8算法做校验,但是编程平台多样,所以总结一下。使用的多项式是:X8 + X2 + X + 1

1 C语言

/*************************************************************
*   函数名称:    gh_crc8
*
*   函数功能:    生成crc8 密匙
*
*   入口参数:    p_buffer 需要校验的数据首地址 buf_size:需要校验的数据的长度
*
*   返回参数:    生成的crc8 秘钥
*
*   说明:p_buffer的空间必须要要>=buf_size 此函数不负责检测数据溢出
*************************************************************/
static uint8_t gh_crc8( uint8_t * p_buffer, uint16_t buf_size )
{uint8_t crc = 0;if(buf_size <= 0){return crc;}while( buf_size-- ){for ( uint8_t i = 0x80; i != 0; i /= 2 ){if ( (crc & 0x80) != 0){crc *= 2;crc ^= 0x07; // 多项式:X8 + X2 + X + 1}else{crc *= 2;}if ( (*p_buffer & i) != 0 ){crc ^= 0x07;}}p_buffer++;}return crc;
}

2 C#

        /**************************************************************  函数名称:    gh_crc8**   函数功能:    生成crc8 密匙** 入口参数:    p_buffer 需要校验的数据首地址 buf_size:需要校验的数据的长度**   返回参数:    生成的crc8 秘钥**    说明:p_buffer的空间必须要要>=buf_size 此函数不负责检测数据溢出*************************************************************/private byte CRC8(byte[] buffer){byte crc = 0;for (int j = 0; j < buffer.Length; j++){for (byte i = 0x80; i != 0; i /= 2){if ((crc & 0x80) != 0){crc *= 2;crc ^= 0x07; // 多项式:X8 + X2 + X + 1}else{crc *= 2;}if ((buffer[j] & i) != 0){crc ^= 0x07;}}}return crc;}

3 JS

const CHECKSUM_TABLE = [0x00, 0x07, 0x0e, 0x09, 0x1c, 0x1b,0x12, 0x15, 0x38, 0x3f, 0x36, 0x31, 0x24, 0x23, 0x2a,0x2d, 0x70, 0x77, 0x7e, 0x79, 0x6c, 0x6b, 0x62, 0x65,0x48, 0x4f, 0x46, 0x41, 0x54, 0x53, 0x5a, 0x5d, 0xe0,0xe7, 0xee, 0xe9, 0xfc, 0xfb, 0xf2, 0xf5, 0xd8, 0xdf,0xd6, 0xd1, 0xc4, 0xc3, 0xca, 0xcd, 0x90, 0x97, 0x9e,0x99, 0x8c, 0x8b, 0x82, 0x85, 0xa8, 0xaf, 0xa6, 0xa1,0xb4, 0xb3, 0xba, 0xbd, 0xc7, 0xc0, 0xc9, 0xce, 0xdb,0xdc, 0xd5, 0xd2, 0xff, 0xf8, 0xf1, 0xf6, 0xe3, 0xe4,0xed, 0xea, 0xb7, 0xb0, 0xb9, 0xbe, 0xab, 0xac, 0xa5,0xa2, 0x8f, 0x88, 0x81, 0x86, 0x93, 0x94, 0x9d, 0x9a,0x27, 0x20, 0x29, 0x2e, 0x3b, 0x3c, 0x35, 0x32, 0x1f,0x18, 0x11, 0x16, 0x03, 0x04, 0x0d, 0x0a, 0x57, 0x50,0x59, 0x5e, 0x4b, 0x4c, 0x45, 0x42, 0x6f, 0x68, 0x61,0x66, 0x73, 0x74, 0x7d, 0x7a, 0x89, 0x8e, 0x87, 0x80,0x95, 0x92, 0x9b, 0x9c, 0xb1, 0xb6, 0xbf, 0xb8, 0xad,0xaa, 0xa3, 0xa4, 0xf9, 0xfe, 0xf7, 0xf0, 0xe5, 0xe2,0xeb, 0xec, 0xc1, 0xc6, 0xcf, 0xc8, 0xdd, 0xda, 0xd3,0xd4, 0x69, 0x6e, 0x67, 0x60, 0x75, 0x72, 0x7b, 0x7c,0x51, 0x56, 0x5f, 0x58, 0x4d, 0x4a, 0x43, 0x44, 0x19,0x1e, 0x17, 0x10, 0x05, 0x02, 0x0b, 0x0c, 0x21, 0x26,0x2f, 0x28, 0x3d, 0x3a, 0x33, 0x34, 0x4e, 0x49, 0x40,0x47, 0x52, 0x55, 0x5c, 0x5b, 0x76, 0x71, 0x78, 0x7f,0x6a, 0x6d, 0x64, 0x63, 0x3e, 0x39, 0x30, 0x37, 0x22,0x25, 0x2c, 0x2b, 0x06, 0x01, 0x08, 0x0f, 0x1a, 0x1d,0x14, 0x13, 0xae, 0xa9, 0xa0, 0xa7, 0xb2, 0xb5, 0xbc,0xbb, 0x96, 0x91, 0x98, 0x9f, 0x8a, 0x8d, 0x84, 0x83,0xde, 0xd9, 0xd0, 0xd7, 0xc2, 0xc5, 0xcc, 0xcb, 0xe6,0xe1, 0xe8, 0xef, 0xfa, 0xfd, 0xf4, 0xf3
];function gh_crc8(buffer){let crc = new Uint8Array(1);crc = 0;for (let i = 0; i < buffer.length; i++) {crc = CHECKSUM_TABLE[(crc ^ (buffer[i] & 0xFF)) & 0xFF];}return (crc & 0xff);
}

以上算法经过实际测试可用!

CRC8校验算法总结相关推荐

  1. CRC查表法——表的由来及Java实现CRC8校验算法

    转载请标明出处: http://blog.csdn.net/xx326664162/article/details/51718857 文章出自:薛瑄的博客 你也可以查看我的其他同类文章,也会让你有一定 ...

  2. CRC-8 校验算法的表计算

    CRC8算法表有两种形式,第一种是256个字节的表,第二种是高4位16字节,低4位16字节. 根据不同多项式算出对应的表中的数据 第一种方法:多项式( 100110001----0x131) #inc ...

  3. 完整性校验用到常见的算法_几种常见的校验算法

    素材来源:网络 编辑整理:strongerHuang UART有一个奇偶校验,CAN通信有CRC校验.Modbus.MAVlink.USB等通信协议也有校验信息. 在自定义数据存储时,有经验的工程师都 ...

  4. 常用校验算法CRC、MD5、SHA_转

    1.算法概述 数据摘要算法是密码学算法中非常重要的一个分支,它通过对所有数据提取指纹信息以实现数据签名.数据完整性校验等功能,由于其不可逆性,有时候会被用做敏感信息的加密.数据摘要算法也被称为哈希(H ...

  5. crc16校验c语言单片机实现,三种常用的CRC16校验算法的C51程序的优化

    CRC校验又称为循环冗余校验,是数据通讯中常用的一种校验算法.它可以有效的判别出数据在传输过程中是否发生了错误,从而保障了传输的数据可靠性. CRC校验有多种方式,如:CRC8.CRC16.CRC32 ...

  6. CRC校验算法的数学原理(上)

    介绍   CRC是Cyclic Redundancy Check的缩写,用中文来讲,就是 循环冗余校验.是一种通过对数据产生固定位数校验码以备侦测数据错误的数据校验技术,主要用来侦测数据传输错误,也可 ...

  7. 嵌入式算法7---CRC校验算法模板

    数据传输过程中差错不可避免,接收方在收到数据后,先对数据的准确性进行校验,异常数据特殊处理.校验的方式有很多,常见的有CRC循环冗余校验.CRC算法检错能力强,效率高,是信息通信领域最为普遍的校验方式 ...

  8. CRC-16原理及通用的16位CRC校验算法代码

    CRC-16原理及通用的16位CRC校验算法代码 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC.它是利用除法及余数的原理来作错误侦测(Error Detect ...

  9. CRC32校验算法原理及计算说明

    本文主要介绍如何使用CRC32校验算法计算得出FCS(Frame Check Sequence帧检验序列). 参考: 1.CRC32加密算法原理 2.CRC多项式对应代码 一.CRC基本原理(Cycl ...

  10. crc16算法php实现,关于实现CRC16校验算法的两个函数

    之前在2017年2月份发布过一个主题,也是关于CRC16的,现在我直接把函数写出来,希望能帮到有需要的朋友.对于在线监测设备数据传输标准来说,CRC16校验算法有基于通用modbus协议的,有基于环保 ...

最新文章

  1. mysql webservice接口_WebService接口在PHP中的使用
  2. 云炬Android开发笔记 5-3,4Restful请求的处理
  3. java 输入流关闭顺序_Java IO流中先关闭输出流还是先关闭输入流?为什么?
  4. 高中计算机竞赛教案,信息技术教学案例评比——选择排序的算法实现(金华第一中学)...
  5. 100 - k8s源码分析-准备工作
  6. Node.js与V8引擎
  7. 梯度下降法与正规方程的比较
  8. java jsp聊天系统_jsp 在线客服聊天源码(websocket)
  9. 在人工智能领域创业,需要明确可知的5个基本条件
  10. win7计算机u盘不显示盘符,U盘不显示磁盘盘符的解决方法
  11. Airpods Pro连接Macbook Pro偶尔会没有声音
  12. 恐龙拼图游戏 - 恐龙世界积木拼图游戏
  13. java锁的种类以及辨析(一):自旋锁
  14. DTC设置控制$85服务
  15. IE 浏览器证书错误常见问题解答
  16. <Zhuuu_ZZ>Spark Streaming
  17. 西西吹雪:从程序员到项目经理(一)
  18. Java打印int类型二进制
  19. Linux-hexdump命令调试event驱动
  20. Uni-app框架UniPush安卓消息推送模拟配置

热门文章

  1. 用Tikz 画一幅神舟12号简图,致敬中国航天工作者,顺便学习Tikz作图的高级技巧!
  2. php全量导出,项目中生成器应用,解决量级数据导出excel内存溢出
  3. 实验设计和结果分析经验总结
  4. 通信原理及系统系列3—— 基于卷积编码的2ASK通信系统设计(非相干解调)
  5. 智慧校园导航软件,实现3D校园室内外定位导航!
  6. 设计心理学1_日常的设计 读后感
  7. 无线网络技术复习笔记(5)——无线城域网、广域网
  8. 【经典算法实现 42】二维傅里叶变换 及 逆变换代码实现
  9. iOS设备使用Airplayer投屏
  10. 汇编语言教程 -- out,in