public class CRC16Helper
{
/// <summary>
/// CRC校验
/// </summary>
/// <param name="data">校验数据</param>
/// <returns>高低8位</returns>
public static string CRCCalc(string data)
{
string[] datas = data.Split(' ');
List<byte> bytedata = new List<byte>(); foreach (string str in datas)
{
bytedata.Add(byte.Parse(str, System.Globalization.NumberStyles.AllowHexSpecifier));
}
byte[] crcbuf = bytedata.ToArray();
//计算并填写CRC校验码
int crc = 0xffff;
int len = crcbuf.Length;
for (int n = ; n < len; n++)
{
byte i;
crc = crc ^ crcbuf[n];
for (i = ; i < ; i++)
{
int TT;
TT = crc & ;
crc = crc >> ;
crc = crc & 0x7fff;
if (TT == )
{
crc = crc ^ 0xa001;
}
crc = crc & 0xffff;
} }
string[] redata = new string[];
redata[] = Convert.ToString((byte)((crc >> ) & 0xff), );
redata[] = Convert.ToString((byte)((crc & 0xff)), );
return data + " " + redata[] + " " + redata[];
} /// <summary>
/// CRC校验
/// </summary>
/// <param name="bytes"></param>
/// <returns></returns>
public static byte[] CRC16(byte[] bytes)
{
//计算并填写CRC校验码
int crc = 0xffff;
int len = bytes.Length;
for (int n = ; n < len; n++)
{
byte i;
crc = crc ^ bytes[n];
for (i = ; i < ; i++)
{
int TT;
TT = crc & ;
crc = crc >> ;
crc = crc & 0x7fff;
if (TT == )
{
crc = crc ^ 0xa001;
}
crc = crc & 0xffff;
} } var nl = bytes.Length + ;
//生成的两位校验码
byte[] redata = new byte[];
redata[] = (byte)((crc & 0xff));
redata[] = (byte)((crc >> ) & 0xff); //重新组织字节数组
var newByte = new byte[nl];
for (int i = ; i < bytes.Length; i++)
{
newByte[i] = bytes[i];
}
newByte[nl - ] = (byte)redata[];
newByte[nl -] = redata[]; return newByte;
}
}

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

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

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

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. Hyper V NAT 网络设置 固定IP / DHCP

    Hyper V 默认的Default Switch同时支持了NAT网络以及DHCP,虚拟机能够访问外网. 但使用过程中发现这个IP网段经常变化,而且Hyper V没有提供管理其NAT网络与DHCP的图 ...

  2. WPF绑定 mode Using System.ComponentModel; IPropertyChanged, if(this.PropertyChanged!=null){ this.PropertyChanged.Invoke(this,new PropertyChangedEventArgs("Name"))

    Mode,它的类型为BindingMode的枚举类型,可以取TwoWay.OneWay.OnTime.OneWayToSource.Default. oneWay:使用 OneWay 绑定时,每当源发 ...

  3. "初识".Net Winfom

    对于“初识”Winform中 初识这两个字的涵义,实际上之前我一直接触的是B/S方面的知识和开发,虽然说不上是熟练,但是大部分时间都是花在B/S上了,例如MVC,如今要从B/S转到C/S了,说实话心里 ...

  4. 关于@HtmlHelper帮助器参数

    @Html.ActionLink("首页", "Index", "Index", new{},new { @class = "na ...

  5. Vue笔记3

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 简单记录(css换行带点与不带点)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. vue-组件化开发基础

    组件化开发基础.分为三个步骤: 创建组件构造器对象 注册组件 使用组件 <!DOCTYPE html> <html lang="en"> <head& ...

  8. CentOS 7上安装Docker

    目录 安装步骤 1.查看Docker的版本 ​ 2.安装 Docker 3.启动Docker 4.设置为开启启动 5.查看Docker安装信息 6.使用Docker 中国加速器 安装步骤 安装操作系统 ...

  9. openstack 创建实例报错 **aborted: Failed to allocate the network(s), not rescheduling

    消息 Build of instance 6320b5f2-edc2-4e8e-b07c-0047f7ed8f6a aborted: Failed to allocate the network(s) ...

  10. 201871010115 马北 《面向对象程序设计(java)》 第6-7周学习总结

    项目 内容 <面向对象程序设计(java)> https://home.cnblogs.com/u/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.c ...