`
cuisuqiang
  • 浏览: 3960357 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
3feb66c0-2fb6-35ff-968a-5f5ec10ada43
Java研发技术指南
浏览量:3670166
社区版块
存档分类
最新评论

CRC 校验

阅读更多

CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

 

import java.util.Arrays;

/**
 * @说明 CRC校验类
 * @author cuisuqiang
 * @version 1.0
 * @since
 */
public class CRCCheck {
	
	public static void main(String[] args) {
		byte[] btm = new byte[] { 12, 13, 1, 0, 0, 1, 0, 31, -19, 0, 8,
				0, 1 };
		byte[] btl = CRCCheck.getCRCByteValue(btm);
		System.out.println(Arrays.toString(btl));
	}

	/**
	 * 入口方法
	 * @param bt 需要校验的字节流
	 * @return
	 */
	public static byte[] getCRCByteValue(byte[] bt){
		char ch = caluCRC(bt);
		return charToByte(ch);
	}

	public static char[] crc_tb = { 0x0000, 0x1021, 0x2042, 0x3063, 0x4084,
			0x50a5, 0x60c6, 0x70e7, 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c,
			0xd1ad, 0xe1ce, 0xf1ef, 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5,
			0x4294, 0x72f7, 0x62d6, 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd,
			0xc39c, 0xf3ff, 0xe3de, 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6,
			0x74c7, 0x44a4, 0x5485, 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee,
			0xf5cf, 0xc5ac, 0xd58d, 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7,
			0x66f6, 0x5695, 0x46b4, 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df,
			0xe7fe, 0xd79d, 0xc7bc, 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840,
			0x1861, 0x2802, 0x3823, 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948,
			0x9969, 0xa90a, 0xb92b, 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71,
			0x0a50, 0x3a33, 0x2a12, 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79,
			0x8b58, 0xbb3b, 0xab1a, 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22,
			0x3c03, 0x0c60, 0x1c41, 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a,
			0xbd0b, 0x8d68, 0x9d49, 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13,
			0x2e32, 0x1e51, 0x0e70, 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b,
			0xaf3a, 0x9f59, 0x8f78, 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c,
			0xc12d, 0xf14e, 0xe16f, 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004,
			0x4025, 0x7046, 0x6067, 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d,
			0xd31c, 0xe37f, 0xf35e, 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235,
			0x5214, 0x6277, 0x7256, 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e,
			0xe54f, 0xd52c, 0xc50d, 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466,
			0x6447, 0x5424, 0x4405, 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f,
			0xf77e, 0xc71d, 0xd73c, 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657,
			0x7676, 0x4615, 0x5634, 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8,
			0x89e9, 0xb98a, 0xa9ab, 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0,
			0x08e1, 0x3882, 0x28a3, 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9,
			0x9bd8, 0xabbb, 0xbb9a, 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1,
			0x1ad0, 0x2ab3, 0x3a92, 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa,
			0xad8b, 0x9de8, 0x8dc9, 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2,
			0x2c83, 0x1ce0, 0x0cc1, 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b,
			0xbfba, 0x8fd9, 0x9ff8, 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93,
			0x3eb2, 0x0ed1, 0x1ef0 };

	/**
	 * 获得CRC验证码
	 */
	public static char caluCRC(byte[] pByte) {
		int len = pByte.length;
		char crc;
		byte da;
		crc = 0x0;
		int i = 0;
		while (len-- != 0) {
			da = (byte) (crc / 256);
			crc <<= 8;
			int num = da ^ pByte[i];
			if (num < 0)
				num += 256;
			crc ^= crc_tb[num];
			++i;
		}
		return crc;
	}

	/**
	 * char 转byte
	 */
	public static byte[] charToByte(char c) {
		byte[] b = new byte[2];
		b[0] = (byte) ((c & 0xFF00) >> 8);
		b[1] = (byte) (c & 0xFF);
		return b;
	}
	
}

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

分享到:
评论

相关推荐

    S7-200的CRC校验程序

    S7-200的CRC校验程序正是针对这一需求设计的,它可以帮助用户生成或验证MODBUS通信中的CRC校验码。 CRC的工作原理基于多项式除法,通过对数据进行特定的数学运算来生成一个短的校验码。这个校验码能够检测出数据...

    CRC校验应用实例CRC校验应用实例CRC校验应用实例CRC校验应用实例

    在实际应用中,CRC校验有多种实现方式,本文将从标题、描述、标签和部分内容四个方面对CRC校验应用实例进行详细的知识点介绍。 一、标题:CRC校验应用实例 * CRC校验是一种常用的数据校验算法,广泛应用于数据存储...

    200 smart PLC的CRC校验测试程序

    200 smart PLC提供的CRC校验测试程序展示了如何利用直接计算法和查表法这两种方法进行CRC校验,并通过比较它们的性能,为实际工程应用提供参考。理解这两种方法的工作原理及其优缺点,能帮助我们在设计和优化PLC程序...

    CRC校验码计算小工具

    在MODBUS协议中,CRC校验码扮演着至关重要的角色,确保了数据在传输过程中的正确性。 MODBUS协议是一种通用的工业标准通信协议,被广泛应用于PLC(可编程逻辑控制器)和其他自动化设备之间进行数据交换。在MODBUS...

    C# 实现CRC校验算法源码

    在本项目中,"C# 实现CRC校验算法源码"是一个控制台应用程序,用户可以通过交互式界面输入需要校验的数据,程序会根据预设的CRC校验规则计算并返回校验码。这个程序的核心是CRC计算函数,它通常会使用位操作来实现,...

    Android开发中使用CRC校验

    CRC校验通过计算数据的特定校验码,然后将这个校验码与接收端计算出的校验码进行比较,以此判断数据是否在传输过程中出现错误。 1. **CRC原理**: CRC校验基于多项式除法,它将待校验的数据看作是二进制多项式的...

    三菱PLC crc校验程序.rar

    在三菱PLC(可编程逻辑控制器)编程中,CRC校验程序通常用于确保数据传输的准确性和完整性,防止由于噪声、干扰或硬件故障导致的数据错误。 CRC的工作原理基于多项式除法,它将数据看作一个二进制数,用一个预定义...

    三菱FX1N编写的CRC校验程序,可代替FX3U的CRC指令

    标题提及的"三菱FX1N编写的CRC校验程序"是针对三菱FX1N系列PLC的一种实现,目的是在不使用FX3U系列PLC特有的CRC指令的情况下,也能完成相同的数据校验功能。这样的程序设计对那些使用FX1N但需要与采用CRC校验通信...

    IEEE 802.11的CRC校验代码

    CRC 校验通过附加一个短的校验码到数据包的尾部来实现,这个校验码是根据数据计算得出的,并且能够检测出大部分的传输错误。 在 IEEE 802.11 标准中,CRC 校验码通常用于保护 MAC 帧的完整性。这个过程涉及到了一个...

    基于博图的CRC校验算法

    在工业自动化领域,特别是在使用如博图(TIA Portal)这样的西门子PLC编程软件时,CRC校验对于确保数据的完整性和一致性至关重要。博图15版提供了集成的CRC计算功能,这有助于在Modbus通信协议中建立可靠的数据交换...

    1200写的CRC校验

    在“1200写的CRC校验”这个主题中,“1200”可能指的是某种特定的CRC计算标准或者参数设置,但没有提供详细信息,我们通常会以通用的CRC校验原理来解释。 CRC校验基于二进制多项式除法,它的核心思想是通过在数据...

    [LabVIEW]实现CRC校验

    CRC校验的原理基于多项式除法,其基本思想是将数据看作一个二进制多项式,然后用一个预定义的生成多项式对其进行除法运算,得到的余数即为CRC校验码。 在LabVIEW环境下,实现CRC校验通常涉及以下步骤: 1. **理解...

    S7-200SMART PLC CRC校验程序.zip

    在工业控制领域,例如西门子的S7-200SMART系列PLC(可编程逻辑控制器)中,CRC校验程序扮演着重要的角色,确保数据传输的完整性和可靠性。 CRC校验通过计算数据的校验码来检测数据在传输或存储过程中可能出现的错误...

    STM32例程CRC校验

    在STM32F107开发板上进行的CRC校验是嵌入式系统中常用的一种错误检测方法,它能确保数据传输或存储的完整性。CRC,即循环冗余校验,通过计算一个简短的固定位数的校验码来检查数据传输或存储过程中可能出现的错误。 ...

    Qt 软件 CRC校验

    **Qt软件CRC校验详解** CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛用于数据传输和存储中的错误检测方法。它通过在数据中附加一个校验码来确保数据的完整性和一致性。在Qt环境中,实现CRC校验可以帮助...

    Modbus-Rtu-指令CRC校验码计算,modbus的crc校验手动计算,C,C++

    提到的“CRC校验工具”可能是一个软件程序,它能帮助用户快速计算Modbus RTU指令的CRC校验码,无论是手动计算还是自动计算。这样的工具通常会提供以下功能: 1. 输入数据字段:用户可以输入待校验的数据,包括...

    CRC校验码计算器(包含8位16位32位)

    CRC校验码具有简单高效、易于硬件实现的特点,被广泛应用在各种通信协议、网络传输、存储系统和文件校验中。 标题提到的"CRC校验码计算器"是一个工具,能够计算8位、16位和32位的CRC值。这表明该软件支持不同长度的...

    VB实现CRC校验程序源码

    资源名:VB实现CRC校验程序源码 资源类型:程序源代码 源码说明: CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环...

    CODESYS ST语言实现MODBUS CRC校验

    标题中的“CODESYS ST语言实现MODBUS CRC校验”指的是使用IEC 61131-3标准的Structured Text(ST)编程语言在CODESYS开发环境中实现MODBUS通信协议中的CRC(Cyclic Redundancy Check)校验功能。MODBUS CRC校验是一...

Global site tag (gtag.js) - Google Analytics