海康充电桩报文校验TCP校验和

1 TCP校验文档校验文档要求:

校验码描述 校验码计算范围包含包头标识、消息头和消息体,校验算法采用 TCP 和校验,具体规则如下。

  1. 将待校验的所有数据分为 16 位的字(大端序),如果总长度为奇数个字节,则在最后增添一个 位都为 0 的字节;
  2. 将所有 16 位的字进行累加,累加结果大于 16 位时把进位一起加到低 16 位的校验和中;
  3. 对计算的检验和取反,作为最后的校验结果,大端序输出;

官方文档带有示例数据,如下图:

这是我们开发中经常用到用累加,取反作校验数据完整性,下面用java代码实现

java代码实现海康充电桩报文校验TCP的校验,代码如下:

java 复制代码
/**
 * @author hua
 * @date 2022/11/13 21:39
 */
public class mainTest {
    /**
     * 海康充电桩报文校验TCP校验和.
     * @param data 待校验的数据字节数组
     * @return 计算出的16位校验和
     */
    public static short calculateTcpChecksumByHK(byte[] data) {


        int sum = 0;

        // 如果数据长度为奇数,添加一个0字节
        if (data.length % 2 > 0) {
            byte[] paddedData = new byte[data.length + 1];
            System.arraycopy(data, 0, paddedData, 0, data.length);
            data = paddedData;
        }

        // 将所有16位的字进行累加
        for (int i = 0; i < data.length; i += 2) {
            int word = ((data[i] << 8) & 0xFF00) + (data[i + 1] & 0xFF);
            sum += word;

            // 处理可能的进位
            while (sum > 0xFFFF) {
                sum = (sum & 0xFFFF) + (sum >> 16);
            }
        }

        // 取反并转换为short类型
        return (short) ~sum;
    }

    public static void main(String[] args) {

        byte[] data = {(byte)0x7d, (byte)0x7b, (byte)0x01, (byte)0x00,
                (byte)0x00, (byte)0x80, (byte)0xdd, (byte)0x00,
                (byte)0x04, (byte)0x04, (byte)0x01, (byte)0x02, (byte)0x00};

        short checksum = calculateTcpChecksumByHK(data);
        System.out.println("Checksum: " + String.format("%04X", checksum));
    }

下面用以上官方文档数据进行测试,输出结果9efd 与官方文档的测试结果一致如下图:

相关推荐
xujiangyan_2 小时前
linux的sysctl系统以及systemd系统。
linux·服务器·网络
泡泡龙~~2 小时前
计算机网络:2、TCP和UDP
tcp/ip·计算机网络·udp
妮妮学代码4 小时前
c#:TCP服务端管理类
java·tcp/ip·c#
吱吱企业安全通讯软件5 小时前
吱吱企业通讯软件保证内部通讯安全,搭建数字安全体系
大数据·网络·人工智能·安全·信息与通信·吱吱办公通讯
云手机掌柜5 小时前
Tumblr长文运营:亚矩阵云手机助力多账号轮询与关键词布局系统
大数据·服务器·tcp/ip·矩阵·流量运营·虚幻·云手机
云边云科技6 小时前
零售行业新店网络零接触部署场景下,如何选择SDWAN
运维·服务器·网络·人工智能·安全·边缘计算·零售
rainFFrain7 小时前
Boost搜索引擎项目(详细思路版)
网络·c++·http·搜索引擎
AOwhisky7 小时前
Linux 文本处理三剑客:awk、grep、sed 完全指南
linux·运维·服务器·网络·云计算·运维开发
.Shu.8 小时前
计算机网络 HTTPS 全流程
网络协议·计算机网络·https
青草地溪水旁9 小时前
网络连接的核心机制
网络