1. public class CRC16Helper
  2. {
  3. /// <summary>
  4. /// CRC校验
  5. /// </summary>
  6. /// <param name="data">校验数据</param>
  7. /// <returns>高低8位</returns>
  8. public static string CRCCalc(string data)
  9. {
  10. string[] datas = data.Split(' ');
  11. List<byte> bytedata = new List<byte>();
  12.  
  13. foreach (string str in datas)
  14. {
  15. bytedata.Add(byte.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier));
  16. }
  17. byte[] crcbuf = bytedata.ToArray();
  18. //计算并填写CRC校验码
  19. int crc = 0xffff;
  20. int len = crcbuf.Length;
  21. for (int n = ; n < len; n++)
  22. {
  23. byte i;
  24. crc = crc ^ crcbuf[n];
  25. for (i = ; i < ; i++)
  26. {
  27. int TT;
  28. TT = crc & ;
  29. crc = crc >> ;
  30. crc = crc & 0x7fff;
  31. if (TT == )
  32. {
  33. crc = crc ^ 0xa001;
  34. }
  35. crc = crc & 0xffff;
  36. }
  37.  
  38. }
  39. string[] redata = new string[];
  40. redata[] = Convert.ToString((byte)((crc >> ) & 0xff), );
  41. redata[] = Convert.ToString((byte)((crc & 0xff)), );
  42. return data + " " + redata[] + " " + redata[];
  43. }
  44.  
  45. /// <summary>
  46. /// CRC校验
  47. /// </summary>
  48. /// <param name="bytes"></param>
  49. /// <returns></returns>
  50. public static byte[] CRC16(byte[] bytes)
  51. {
  52. //计算并填写CRC校验码
  53. int crc = 0xffff;
  54. int len = bytes.Length;
  55. for (int n = ; n < len; n++)
  56. {
  57. byte i;
  58. crc = crc ^ bytes[n];
  59. for (i = ; i < ; i++)
  60. {
  61. int TT;
  62. TT = crc & ;
  63. crc = crc >> ;
  64. crc = crc & 0x7fff;
  65. if (TT == )
  66. {
  67. crc = crc ^ 0xa001;
  68. }
  69. crc = crc & 0xffff;
  70. }
  71.  
  72. }
  73.  
  74. var nl = bytes.Length + ;
  75. //生成的两位校验码
  76. byte[] redata = new byte[];
  77. redata[] = (byte)((crc & 0xff));
  78. redata[] = (byte)((crc >> ) & 0xff);
  79.  
  80. //重新组织字节数组
  81. var newByte = new byte[nl];
  82. for (int i = ; i < bytes.Length; i++)
  83. {
  84. newByte[i] = bytes[i];
  85. }
  86. newByte[nl - ] = (byte)redata[];
  87. newByte[nl -] = redata[];
  88.  
  89. return newByte;
  90. }
  91. }

第一个方法是把校验位返回,返回的是字符串

第二个是在第一个的基础上改的,返回的是加了校验位之后的数据,字节数组。

说明:代码来自好互联网。

c# CRC16位校验辅助类的更多相关文章

  1. CRC16位校验

    之前有跟第三方通讯合作,应为CRC表码问题导致校验出结果不一致,纠结了很久,最后直接采用CRC计算方式校验才解决. 两种方式贴,自行对比. CRC校验计算方法 private ushort CRC_1 ...

  2. 如何使用Delphi编写Modbus RTU CRC16的校验码

    在工业控制中,Modbus RTU CRC16的校验码用的比较广泛,包括本人富士产品中,PC与伺服电机以及PC与VP系列的变频器的Modbus RTU通讯中都使用到了CRC16.     而对CRC1 ...

  3. C语言实现的CRC16/CCITT-FALSE校验码函数

    要求:输入字符串“00 AA FF CC AA 01 00” 得到校验码“79B1” 方法1: // ConsoleApplication1.cpp: 定义控制台应用程序的入口点. // #inclu ...

  4. Java CRC16 MODBUS校验算法实现

    /** * CRC校验算法工具类 */ public class CRCUtil { public static String getCRC(String data) { data = data.re ...

  5. 查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

    // test4.cpp : 此文件包含 "main" 函数.程序执行将在此处开始并结束.// #include "pch.h"#include <ios ...

  6. 最详细易懂的CRC-16校验原理(附源程序)(转)

    最详细易懂的CRC-16校验原理(附源程序) from:http://www.openhw.org/chudonganjin/blog/12-08/230184_515e6.html 最详细易懂的CR ...

  7. 最详细易懂的CRC-16校验原理(附源程序)

    from:http://www.openhw.org/chudonganjin/blog/12-08/230184_515e6.html 最详细易懂的CRC-16校验原理(附源程序) 1.循环校验码( ...

  8. java 实现从15位~18位的身份证号码转换,校验中国大陆公民身份证、香港居民身份证、澳门身份证和台湾身份证。

    package xidian.sl.netcredit.util; /** * Copyright (C) 2009-2010 Yichuan, Fuchun All rights reserved. ...

  9. C# 实现CRC16校验

    前言 本文将使用一个NuGet公开的组件技术来实现CRC16校验功能,提供了一些简单的API,来方便的实现. 在Visual Studio 中的NuGet管理器中可以下载安装,也可以直接在NuGet控 ...

随机推荐

  1. IDEA的常用配置(Maven)一键导入及优化内存

    IDEA的常用配置一键导入 一.在https://www.cnblogs.com/zyx110/p/10799387.html中下载如图的压缩包 下载完成后解压缩,点击settings_bak,你会看 ...

  2. asp.net 创建虚拟目录 iis创建虚拟目录

    这几天本人接了个档案管理查询系统的小项目,踩过的坑. 其实功能都挺简单的,大致要求客户有很多pdf文档,为了方便管理,所有要开发一个相当于文件管理系统,本人正好有现成的文件管理系统,修改下就可以.其中 ...

  3. background 设置文本框背景图

    background 属性的作用是给元素设置背景,它是一个复合属性,常用的子属性如下: background-color 指定元素的背景颜色. background-image 指定元素的背景图像. ...

  4. Retrofit的优点

    Retrofit的优点 可以配置不同HTTP client来实现网络请求,如okhttp.httpclient等 将接口的定义与使用分离开来,实现结构. 支持多种返回数据解析的Converter可以快 ...

  5. Python requests库的使用(一)

    requests库官方使用手册地址:http://www.python-requests.org/en/master/:中文使用手册地址:http://cn.python-requests.org/z ...

  6. Linux 配置程序包源 Nuget

    编辑文件NuGet.Config vi ~/.nuget/NuGet/NuGet.Config 新增源 <add key="fz" value="http://19 ...

  7. 【MongoDB详细使用教程】三、高级查询

    目录 1.使用比较运算符查询 2.使用关键字查询 2.1.in/not in 关键字 2.2.size 关键字 2.3.exists 关键字 2.4.or 关键字 3.模糊查询 4.查询结果排序 5. ...

  8. Linux 信号量之Posix有名字的信号量

    信号量(semaphore),也和互斥锁一样提供了线程间或者进程间的同步功能. 信号量有三种: Posix有名字的信号量 Posix基于内存的信号量 System V信号量 信号量比互斥锁高级,互斥锁 ...

  9. kerberos&LDAP实现免密码登录搭建

    kerberos && openldap 1.install openldap & kerberos server: yum install db4 db4-utils db4 ...

  10. (导航页)OpenStack-M版-双节点手工搭建-附B站视频

    ↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 本次搭建采用双节点,离线源搭建, 配置如下 本次搭建采用2台4核4G的虚拟机,也可以改为2核4G ...