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校验码、补码求和校验码四种校验码及校验码匹配工具类...相关推荐

  1. md5校验 java_java生成MD5校验码

    在Java中,java.security.MessageDigest (rt.jar中)已经定义了 MD5 的计算,所以我们只需要简单地调用即可得到 MD5 的128 位整数.然后将此 128 位计 ...

  2. Java生成四种格式的二维码

    2022年2月23日 随着技术的不断发展与更新,现在的二维码的生成,完全可以交给前端来进行实现. 基于谷歌zxing实现的生成二维码工具类.可生成纯二维码:带Logo二维码:带文字二维码:带Logo带 ...

  3. .net使用正则表达式校验、匹配字符工具类

    开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: 1 /// <summary> 2 /// 字符(串)验证.匹配工具类 3 /// </summary> 4 ...

  4. 四种Sandcastle方法生成c#.net帮助类帮助文档

    阅读目录(Content) 方法一.Visual Studio新建documentation生成帮助文档 一.下载 二.安装 三.设置 五.生成 方法二.cmd生成帮助文档 方法三.Sandcastl ...

  5. Java中使用UUID工具类生成唯一标志防止重复

    场景 UUID 是指Universally Unique Identifier,翻译为中文是通用唯一识别码,UUID 的目的是让分布式系统中的所有元素都能有唯一的识别信息. 在某些场景下需要给数据库中 ...

  6. Java生成各种随机数的工具类

    介绍 在Java开发中,经常需要生成各种随机数,其中Integer,Long,Float,Decimal用的最多,下面就来封装一个随机数工具类吧 代码 根据业务设置同一类型数值的不同形式,会使用Ran ...

  7. vip激活码、兑换码生成工具类,支持校验

    最近做了一个这样的需求,系统有一部分vip用户不需要普通用户购买,而是公司统一购买兑换码,公司员工输入自己的兑换码,如果兑换码正确的话,自动升级为vip用户,兑换码要数字和大写字母,不能重复,这里记录 ...

  8. java 图形校验_java图形验证码生成工具类 web页面校验验证码

    java图形验证码生成工具类 web页面校验验证码 发布于 2020-7-14| 复制链接 摘记: 最近做验证码,参考网上案例,发现有不少问题,特意进行了修改和完善.验证码生成器: ```java i ...

  9. 生成sign(签名),以及校验工具类

    生成sign(签名),以及校验工具类 package cn.weixiuhui.support.comm.utils; import java.io.IOException; import java. ...

最新文章

  1. 我这样写代码,比直接使用 MyBatis 效率提高了100倍!
  2. 如何修改控件边框的样式_Excel如何设置表格边框样式,记住这几个关键属性就懂了...
  3. Linux下批量添加用户的两种方法
  4. 高校计算机课程建设研讨会通知,常熟理工学院新闻网
  5. 编程算法 - 切割排序 代码(C)
  6. Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)
  7. 网路工程师要不要学mysql_网络工程师要学什么_网络工程师需要的技能
  8. java匿名内部对象_JavaSE 学习参考:匿名内部类和匿名对象
  9. SAP License:SAP 销售成本会计VS期间会计
  10. Hadoop集群的启动顺序
  11. FATFS Copy Files
  12. [BUG] CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)...
  13. 在dll中用DirectSound8同时播放多个wav文件不能发声
  14. CrystalBall
  15. XML编辑器oXygen XML Editor V19大版本更新 | 附下载
  16. flutter 使用阿里图标
  17. 为什么你的问题总是得不到博主回复?一文教你如何高效和博主进行沟通!
  18. GAE+bottle+jinja2+beaker快速开发demo
  19. 5.GitHub pytorch sentiment analysis(Transformer版)
  20. Faster R-CNN 源码解读 (傻瓜版) - Pytorch

热门文章

  1. [LeetCode] 322.零钱兑换 五种方法讲解
  2. Paint画笔常用API
  3. D2admin导出Execl
  4. C语言面向对象实现滑动均值滤波与平均值滤波
  5. java swagger ui 教程_swagger 以及swaggerUI使用的步骤
  6. 微服务中的熔断、限流、降级
  7. 肠胃功能紊乱如何调理
  8. EasyDSS修改RTMP推流端口后直播无法回放录像问题优化
  9. 区块链学习笔记2——BTC中的数据结构
  10. 寓言故事《听风就是雨的狼》