JAVA版CRC校验

<span style="white-space:pre">	</span>/**
	 * 计算产生校验码
	 *
	 * @param data
	 *            需要校验的数据
	 * @return
	 */
	public static String Make_CRC(byte[] data) {
		byte[] buf = new byte[data.length];// 存储需要产生校验码的数据
		for (int i = 0; i < data.length; i++) {
			buf[i] = data[i];
		}
		int len = buf.length;
		int crc = 0xFFFF;
		for (int pos = 0; pos < len; pos++) {
			if (buf[pos] < 0) {
				crc ^= (int) buf[pos] + 256; // XOR byte into least sig. byte of
												// crc
			} else {
				crc ^= (int) buf[pos]; // XOR byte into least sig. byte of crc
			}
			for (int i = 8; i != 0; i--) { // Loop over each bit
				if ((crc & 0x0001) != 0) { // If the LSB is set
					crc >>= 1; // Shift right and XOR 0xA001
					crc ^= 0xA001;
				} else
					// Else LSB is not set
					crc >>= 1; // Just shift right
			}
		}
		String c = Integer.toHexString(crc);
		if (c.length() == 4) {
			c = c.substring(2, 4) + c.substring(0, 2);
		} else if (c.length() == 3) {
			c = "0" + c;
			c = c.substring(2, 4) + c.substring(0, 2);
		} else if (c.length() == 2) {
			c = "0" + c.substring(1, 2) + "0" + c.substring(0, 1);
		}
		return c;
	}

时间: 2024-10-13 10:33:40

JAVA版CRC校验的相关文章

最严格的身份证校验(Java版)

上一篇博客贴出了JavaScript版本的身份证校验,本篇博客将贴出Java版的身份证校验:         import java.util.Date; /** * 校验身份证号码是否有效 * * @author GaoHuanjie */         public class CheckCertificateNo { @SuppressWarnings("deprecation") publicstaticvoid main(String[] args) { String ce

二代身份证号码校验 Java版

未命名 import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.regex.Pattern;public class IdCardValidator {    public static void main(String[] args) {        System.out.printl

回溯算法解八皇后问题(java版)

八皇后问题是学习回溯算法时不得不提的一个问题,用回溯算法解决该问题逻辑比较简单. 下面用java版的回溯算法来解决八皇后问题. 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 思路是按行来规定皇后,第一行放第一个皇后,第二行放第二个,然后通过遍历所有列,来判断下一个皇后能否放在该列.直到所有皇后都放完,或者放哪

Redis源码中的CRC校验码(crc16、crc64)原理浅析

在阅读Redis源码的时候,看到了两个文件:crc16.c.crc64.c.下面我抛砖引玉,简析一下原理. CRC即循环冗余校验码,是信息系统中一种常见的检错码.大学课程中的"计算机网络"."计算机组成"等课程中都有提及.我们可能都了解它的数学原理,在试卷上手工计算一个CRC校验码,并不是难事.但是计算机不是人,现实世界中的数学原理需要转化为计算机算法才能实现目的.实际上作为计算机专业背景人并不会经常使用或接触到CRC的计算机算法实现的原理,通常是电子学科背景的人士

文档:网络通讯包结构(crc校验,加解密)

包结构: 包 对(datacrc+protoID+dataSize)组成的byte[] 进行crc计算而得到 对(数据内容)进行crc计算而得到 协议号 数据内容的字节长度 数据内容 字段 headcrc datacrc protoID dataSize data 类型 uint uint ushort ushort byte[] 字节数 4 4 2 2 dataSize crc校验 问:TCP协议中,底层做了校验,那通信时我们还有必要再进行有CRC或者其他校验吗? 答:tcp 是可靠的, 就是

计算机网络——CRC校验码的简单测试

目录 循环冗余校验码 简单例子 程序代码 运行结果 循环冗余校验码 了解CRC校验 简单例子 实际的CRC校验码生成是采用二进制的模2算法(即减法不借位.加法不进位)计算出来的,这是一种异或操作.下面通过一些例子来进一步解释CRC的基本工作原理.假设: (1)设约定的生成多项式为G(x)=x4+x+1,其二进制表示为10011,共5位,其中k=4. (2)假设要发送数据序列的二进制为101011(即f(x)),共6位. (3)在要发送的数据后面加4个0(生成f(x)*xk),二进制表示为1010

单片机模块化程序: CRC校验

前言 这一节说明一下数据传输中常用的CRC校验 所谓CRC校验,说白了就是对数据做下计算,然后把计算结果放到最后面 平时用的最多的算是CRC16 直接上菜 计算CRC /*** @brief calculate CRC* @param *modbusdata: Source data address* @param length: data length* @param * @retval CRC16 Value* @example **/int crc16_modbus(u8 *modbusd

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插

Java版贪吃蛇(比较完善的版本)

很认真的写的一个java版的贪吃蛇游戏,图形界面,支持菜单操作,键盘监听,可加速,减速,统计得分,设定运动速度,设定游戏背景颜色等!应该没有Bug了,因为全被我修改没了.哈哈. 下面是项目各包及类的层次关系: 游戏的主要运行界面截图如下: 下面是部分代码,详细源码见此链接:http://pan.baidu.com/s/1bnubnzh //Snake类: package com.huowolf.entities; import java.awt.Color; import java.awt.Gr