异或校验 java_Java生成异或校验码、和校验码、CRC校验码、补码求和校验码四种校验码及校验码匹配工具类...
Java生成异或校验码、和校验码、CRC校验码、补码求和校验码四种校验码及校验码匹配工具类
/**
* 报文校验码验证规则
*/
public class Verification {
/**
* 校验校验码是否一致
* @param type 需要使用的校验规则
* @param bytes 待生成校验码的字节数组
* @param code 待匹配的校验码字节数组
* @param changeGD 是否高低位转换,true低位在前高位在后,false高位在前低位在后
* @return true校验一致
*/
public static boolean checkVerification(int type,byte[] bytes,byte[] code,boolean changeGD){
switch (type){
case 10:
byte b = andVerification(bytes);
if(b==code[0])
return true;
else
return false;
case 11:
byte[] b1 = crcVerification(bytes,changeGD);
if(b1[0]==code[0]&&b1[1]==code[1])
return true;
else
return false;
case 12:
byte b2 = orVerification(bytes);
if(b2==code[0])
return true;
else
return false;
case 13:
byte b3 = complement(bytes);
if(b3==code[0])
return true;
else
return false;
default:
return false;
}
}
/**
* 异或校验,返回一个字节
* @param bytes 待计算校验的字节数组
* @return 校验码
*/
public static byte orVerification(byte[] bytes){
int nAll = 0;
for (int i = 0; i < bytes.length; i++) {
int nTemp = bytes[i];
nAll = nAll ^ nTemp;
}
return (byte) nAll;
}
/**
* 和校验,所有数据求和后%256 ,返回一个字节
* @param bytes 待计算校验的字节数组
* @return 校验码
*/
public static byte andVerification(byte[] bytes){
int iSum = 0;
for (int i = 0;i < bytes.length;i++)
{
iSum += bytes[i];
}
iSum %= 0x100;
return (byte)iSum;
}
/**
* CRC校验,返回两个字节
* @param bytes 待计算校验的字节数组
* @param changeGD 是否转换高低位,true低位在前高位在后,false高位在前低位在后
* @return 校验码
*/
public static byte[] crcVerification(byte[] bytes,boolean changeGD){
int CRC = 0x0000ffff;
int POLYNOMIAL = 0x0000a001;
int i, j;
for (i = 0; i < bytes.length; i++) {
CRC ^= (int) bytes[i];
for (j = 0; j < 8; j++) {
if ((CRC & 0x00000001) == 1) {
CRC >>= 1;
CRC ^= POLYNOMIAL;
} else {
CRC >>= 1;
}
}
}
if(changeGD){
CRC = ( (CRC & 0x0000FF00) >> 8) | ( (CRC & 0x000000FF ) << 8);
}
return String.valueOf(CRC).getBytes();
}
/**
* 补码求和校验,返回一个字节
* @param bytes 待计算校验的字节数组
* @return 校验码
*/
public static byte complement(byte[] bytes){
int iSum = 0;
for (int i = 0;i < bytes.length;i++)
{
iSum += bytes[i];
}
iSum = 256 - iSum;
return (byte) iSum;
}
}
©著作权归作者所有:来自51CTO博客作者小龙along的原创作品,如需转载,请注明出处,否则将追究法律责任
异或校验 java_Java生成异或校验码、和校验码、CRC校验码、补码求和校验码四种校验码及校验码匹配工具类...相关推荐
- md5校验 java_java生成MD5校验码
在Java中,java.security.MessageDigest (rt.jar中)已经定义了 MD5 的计算,所以我们只需要简单地调用即可得到 MD5 的128 位整数.然后将此 128 位计 ...
- Java生成四种格式的二维码
2022年2月23日 随着技术的不断发展与更新,现在的二维码的生成,完全可以交给前端来进行实现. 基于谷歌zxing实现的生成二维码工具类.可生成纯二维码:带Logo二维码:带文字二维码:带Logo带 ...
- .net使用正则表达式校验、匹配字符工具类
开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: 1 /// <summary> 2 /// 字符(串)验证.匹配工具类 3 /// </summary> 4 ...
- 四种Sandcastle方法生成c#.net帮助类帮助文档
阅读目录(Content) 方法一.Visual Studio新建documentation生成帮助文档 一.下载 二.安装 三.设置 五.生成 方法二.cmd生成帮助文档 方法三.Sandcastl ...
- Java中使用UUID工具类生成唯一标志防止重复
场景 UUID 是指Universally Unique Identifier,翻译为中文是通用唯一识别码,UUID 的目的是让分布式系统中的所有元素都能有唯一的识别信息. 在某些场景下需要给数据库中 ...
- Java生成各种随机数的工具类
介绍 在Java开发中,经常需要生成各种随机数,其中Integer,Long,Float,Decimal用的最多,下面就来封装一个随机数工具类吧 代码 根据业务设置同一类型数值的不同形式,会使用Ran ...
- vip激活码、兑换码生成工具类,支持校验
最近做了一个这样的需求,系统有一部分vip用户不需要普通用户购买,而是公司统一购买兑换码,公司员工输入自己的兑换码,如果兑换码正确的话,自动升级为vip用户,兑换码要数字和大写字母,不能重复,这里记录 ...
- java 图形校验_java图形验证码生成工具类 web页面校验验证码
java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...
- 生成sign(签名),以及校验工具类
生成sign(签名),以及校验工具类 package cn.weixiuhui.support.comm.utils; import java.io.IOException; import java. ...
最新文章
- 我这样写代码,比直接使用 MyBatis 效率提高了100倍!
- 如何修改控件边框的样式_Excel如何设置表格边框样式,记住这几个关键属性就懂了...
- Linux下批量添加用户的两种方法
- 高校计算机课程建设研讨会通知,常熟理工学院新闻网
- 编程算法 - 切割排序 代码(C)
- Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)
- 网路工程师要不要学mysql_网络工程师要学什么_网络工程师需要的技能
- java匿名内部对象_JavaSE 学习参考:匿名内部类和匿名对象
- SAP License:SAP 销售成本会计VS期间会计
- Hadoop集群的启动顺序
- FATFS Copy Files
- [BUG] CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)...
- 在dll中用DirectSound8同时播放多个wav文件不能发声
- CrystalBall
- XML编辑器oXygen XML Editor V19大版本更新 | 附下载
- flutter 使用阿里图标
- 为什么你的问题总是得不到博主回复?一文教你如何高效和博主进行沟通!
- GAE+bottle+jinja2+beaker快速开发demo
- 5.GitHub pytorch sentiment analysis(Transformer版)
- Faster R-CNN 源码解读 (傻瓜版) - Pytorch