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

//通用modbus CRC校验算法

func modbusCRC(dataString string) string {

crc := 0xFFFF

length := len(dataString)

for i := 0; i < length; i++ {

//通用modbus取寄存器的低8位参与异或运算

crc = ((crc << 8) >> 8) ^ int(dataString[i])

for j := 0; j < 8; j++ {

flag := crc & 0x0001

crc >>= 1

if flag == 1 {

crc ^= 0xA001

}

}

}

//得到的十六进制校验码是按照高字节在前低字节在后的字符串

//要翻转,按照低字节在前高字节在后

//校验码必须是4个字符,不足4位的需要在开头补0

hex := strconv.FormatInt(int64(crc), 16) //格式化为16进制字符串

tmp := hex[2:] + hex[:2]

if len(tmp) == 3 {

tmp = "0" + tmp

}

return tmp

}

//HJ212 CRC校验算法

func hjt212CRC(dataString string) string {

crc := 0xFFFF

length := len(dataString)

for i := 0; i < length; i++ {

//hj212取寄存器的高8位参与异或运算

crc = (crc >> 8) ^ int(dataString[i])

for j := 0; j < 8; j++ {

flag := crc & 0x0001

crc >>= 1

if flag == 1 {

crc ^= 0xA001

}

}

}

//因为是基于右移位运算的结果,得到的本身就是低字节在前高字节在后的结果

//不足4位的需要在开头补0

hex := strconv.FormatInt(int64(crc), 16)

if len(hex) == 3 {

hex = "0" + hex

}

return hex

}

![捕获.PNG](http://studygolang.qiniudn.com/170728/5155c4ab390e097e2da06e6889b9312f.PNG)

有疑问加站长微信联系(非本文作者)

crc16算法php实现,关于实现CRC16校验算法的两个函数相关推荐

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

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

  2. 异或校验算法 c语言程序,C# 异或校验算法

    C# 的异或校验算法 直接上代码 public partial class FormCRC : Form { public FormCRC() { InitializeComponent(); } p ...

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

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

  4. Adler-32校验算法

    Adler-32校验算法 Adler-32是Mark Adler发明的校验和算法,和32位CRC校验算法一样,都是保护数据防止意外更改的算法,但是这个算法较容易被伪造,所以是不安全的保护措施.但是比C ...

  5. 常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum

    常用的简单校验算法:校验和,异或校验,crc校验,LRC校验,补码求和,checksum 相关思路和源码来自网络,自己只是整理, 做笔记用. 并未完整完善正确归纳,只是个人理解初步做笔记记录. 在实现 ...

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

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

  7. VS 2019 MFC CRC16校验算法例程总结(计算法/查表法以及CRC16校验表自动生成)

            工程需要,根据网上例程对CRC16校验方法进行了总结.CRC16为通讯领域常用的校验算法,其原理想必大家都很清楚.下面为相关的总结和封装类代码.被例程将CRC16校验的方法分为及算法和 ...

  8. crc16检验 python_Python CRC16校验算法

    def crc16(x, invert): a = 0xFFFF b = 0xA001 for byte in x: a ^= ord(byte) for i in range(8): last = ...

  9. C 语言 crc16校验算法,CRC16的标准校验算法及C语言实现(附代码)

    原标题:CRC16的标准校验算法及C语言实现(附代码) CRC码由发送端计算,放置于发送信息报文的尾部.接收信息的设备再重新计算接收到信息报文的CRC,比较计算得到的CRC是否与接收到的相符,如果两者 ...

最新文章

  1. WSFC 仲裁模型选择
  2. ajax怎样发变量,使用jQuery Ajax发送多个变量
  3. Karma和Jasmine 自动化单元测试环境搭建
  4. python好学吗mooc中文网-2020年大学mooc用Python玩转数据作业答案
  5. 1. 初探MongoDB —— 介绍、安装和配置
  6. 逻辑回归和线性回归的区别_机器学习简介之基础理论- 线性回归、逻辑回归、神经网络...
  7. 操作系统【逻辑空间、物理空间与页表大小的关系】【分页地址映射(方法+例题)】
  8. 4.Maven概念模型,maven的生命周期,Maven坐标,依赖管理(依赖范围,依赖声明),仓库管理,私服概念
  9. C#中的线程(一)入门
  10. JQuery对象与DOM对象的区别与转换
  11. 【Antlr】Antlr 自动错误恢复机制
  12. opencv编译问题
  13. 《DOM编程艺术》中CSS—DOM的总结(一)
  14. Matlab中的逻辑运算与,||与|的区别
  15. 三思笔记_在使用buildconfig调试之前要三思
  16. 简易数据分析 04 | Web Scraper 初尝--抓取豆瓣高分电影
  17. -webkit-touch-callout: none;禁止ios弹出菜单,长按图片保存到手机时
  18. OWASP ZAP 扫描漏洞误报分析
  19. jQuery取值和赋值的基本方法
  20. win11 右下角图标(网络,音量,电量)点击无反应解决方法

热门文章

  1. 02-NLP-01-jieba中文处理
  2. 即构推出小程序连麦直播方案,与iOSAndroid APP互通连麦!
  3. 由点到面 旅游让丝路明珠敦煌更加智慧
  4. android调试推荐使用BlueStacks模拟器调试Android应用
  5. ubuntu 10.04 安装 pyquery
  6. OAF页面查找数据源
  7. shell 去除 字符串中的双引号
  8. golang 追加内容到文件
  9. python3 dict.keys() dict_keys类型 转换 list类型
  10. linux flatpak 简介 同一个应用在不同linux发行版运行