package com.hcs.lqjc.controller.dongDaHengFeng.ModBus.utils;/*** @author lwt* @date 2018-06-26** CRC16校验码计算* <p>* (1).预置1个16位的寄存器为十六进制FFFF(即全为1),称此寄存器为CRC寄存器;* (2).把第一个8位二进制数据(既通讯信息帧的第一个字节)与16位的CRC寄存器的低* 8位相异或,把结果放于CRC寄存器;* (3).把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检查右移后的移出位;* (4).如果移出位为0:重复第3步(再次右移一位);如果移出位为1:CRC寄存器与多项式A001(1010 0000 0000 0001)进行异或;* (5).重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;* (6).重复步骤2到步骤5,进行通讯信息帧下一个字节的处理;* (7).将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低* 字节进行交换;* (8).最后得到的CRC寄存器内容即为CRC16码。(注意得到的CRC码即为低前高后顺序)*/
public class CRC16 {/*** 计算CRC16校验码** @param data 需要校验的字符串* @return 校验码*/public static String getCRC(String data) {data = data.replace(" ", "");int len = data.length();if (!(len % 2 == 0)) {return "0000";}int num = len / 2;byte[] para = new byte[num];for (int i = 0; i < num; i++) {int value = Integer.valueOf(data.substring(i * 2, 2 * (i + 1)), 16);para[i] = (byte) value;}return getCRC(para);}/*** 计算CRC16校验码** @param bytes 字节数组* @return {@link String} 校验码* @since 1.0*/public static String getCRC(byte[] bytes) {//CRC寄存器全为1int CRC = 0x0000ffff;//多项式校验值int POLYNOMIAL = 0x0000a001;int i, j;for (i = 0; i < bytes.length; i++) {CRC ^= ((int) bytes[i] & 0x000000ff);for (j = 0; j < 8; j++) {if ((CRC & 0x00000001) != 0) {CRC >>= 1;CRC ^= POLYNOMIAL;} else {CRC >>= 1;}}}//结果转换为16进制String result = Integer.toHexString(CRC).toUpperCase();if (result.length() != 4) {StringBuffer sb = new StringBuffer("0000");result = sb.replace(4 - result.length(), 4, result).toString();}//交换高低位return result.substring(2, 4) + result.substring(0, 2);}public static void main(String[] args) {//01 03 20 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 8C 45//01 03 00 00 00 08 44 0C//01 03 10 00 8F 02 4E 00 91 02 44 00 92 02 5A 00 8B 02 47 40 D8System.out.println(getCRC("01 03 20 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF 7F FF"));System.out.println(getCRC("01 03 00 00 00 08"));System.out.println(getCRC("01 03 10 00 8F 02 4E 00 91 02 44 00 92 02 5A 00 8B 02 47"));}
}

JAVA CRC16校验码计算相关推荐

  1. java计算CRC16校验码

    java计算校验码的一个公式,亲测可行有效 /*** 计算CRC16校验码** @param data 需要校验的字符串* @return 校验码*/public static String getC ...

  2. php crc16校验算法,PHP串口通信中计算crc16校验码

    最近使用PHP开发串口通信业务,在发送485Modbus命令时,基本都要计算CRC16校验码.网上搜索了很多文章,很多都计算的不对.本文记录搜索到的正确的计算方法. 代码如下:/** * crc16计 ...

  3. PHP CRC16 校验码的算法怎么使用

    PHP CRC16 校验码的算法如何使用 最近用到CRC16, 我现在就是要把 010301180001 算出CRC16的校验码,通过其他工具,可以得到 校验码是 05F1 最后完整的代码就是 010 ...

  4. bcc校验位怎么算的_数据BCC校验码计算工具

    这是数据BCC校验码计算工具下载,获得数据BCC校验码工具,MFC开发,使用方便,输入数据16进制字符串,点击计算生成BCC码.. 软件介绍 数据BCC校验码计算工具,难免会发生错误.为了避免这种错误 ...

  5. C语言CRC校验码计算与校验

    循环冗余校验(cyclicredundancy check,CRC)对传输序列进行一次规定的除法操作,将除法操作的余数附加在传输信息的后面.在接收端,也对收到的数据做相同的除法.如果接收端除法得到的结 ...

  6. 16位CRC校验码计算,485MODBUS计算

    CRC计算方法是: 1. 加载一值为0XFFFF的16位寄存器,此寄存器为CRC寄存器. 2. 把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的相异或,异或的结果仍存放于该C ...

  7. QT ModbusCRC16 校验码计算(非查表法,直接计算)

    记录一下QT中如何实现 ModbusCRC16 校验码计算 #include <QCoreApplication> #include <QDebug>//CRC16计算函数 u ...

  8. JAVA CRC16校验

    方法一 /*** 计算CRC16校验码** @param bytes* @return*/public static String getCRC(byte[] bytes) {int CRC = 0x ...

  9. python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS

    python crc-16 crc-16校验码 crc-16校验算法 ppp(MAC)帧检验序列FCS 想弄明白这里要看多几遍,配合下面的例子能更快理解. 第一.CRC-16校验码计算方法: 常用查表 ...

  10. 十六进制数据的CRC16校验码自写软件

    关于十六进制数据的CRC16校验码自写软件安装包 十六进制数据的CRC16校验码(0XA001)自写软件 链接与图片 全部代码 十六进制数据的CRC16校验码(0XA001)自写软件 这里分享一个自己 ...

最新文章

  1. C#中用schema验证xml的合法性
  2. 听说这是准备下班的时候,测试又提bug过来的表情
  3. 如何快速重置打印队列
  4. linux Vi搜索和替换字符串
  5. PAT甲级1146 Topological Order :[C++题解]拓扑排序、结构体存边、图论
  6. R语言实战应用精讲50篇(十一)-单因素方差分析 | 事后两两多重比较 | 趋势方差分析
  7. 推荐的版本 lock 语句(C# 参考)
  8. 机器人编程与python语言的区别_儿童编程和机器人编程有啥区别?
  9. 数据库范式5nf_第四范式(4NF)| 数据库管理系统
  10. Vue项目启动报错 error:cannot find module xxx
  11. b站全站排行刷新去掉观看
  12. python递归(一分钟读懂)
  13. 如何在工作中如鱼得水?有三点很重要
  14. 禁用Dropbear中DNS反向查询连接客户端地址补丁
  15. 服务器托管过程中勒索病毒的预防
  16. 如何批量获取过期老域名
  17. qq邮箱android版官方,QQ邮箱下载_腾讯QQ邮箱客户端下载【安卓版】-太平洋下载中心...
  18. 计算机考试从哪里如何出题,计算机基础考试系统出题-第4章 excel.xls
  19. JAVA计算机毕业设计校园二手书交易平台(附源码、数据库)
  20. 电子科技大学人工智能期末复习笔记(三):一阶逻辑

热门文章

  1. JanusGraph学习手册
  2. 高等数学上下册及习题解析(同济第七版)
  3. 勤哲服务器项目模板,勤哲excel服务器,模板.doc
  4. 黑苹果配置挑选,教你组装一台苹果机
  5. 小米平板4刷recovery教程_小米4刷第三方recovery教程和方法
  6. 细说汽车电子通信总线之CAN-FD 总线协议详解
  7. 蓝桥杯c语言试题(3)
  8. 开心消消乐、纯前端实现开心消消乐、开心消消乐代码、HTML+JS实现开心消消乐
  9. Unity简单实现调用电脑打印机打印图片功能
  10. 小米路由插件二维码2020_路由器如何禁止抖音、斗鱼、王者荣耀等app联网