php实现CRC校验 适用于MODBUS协议

php 复制代码
function CRC16($string)
    {
        $crcBytes = [];
            for ($i = 0; $i < strlen($string); $i += 2) {
                $crcBytes[] = hexdec(substr($string, $i, 2));
            }
            $crc = 0xFFFF;
            $polynomial = 0xA001;  // This is the polynomial x^16 + x^15 + x^2 + 1
    
            foreach ($crcBytes as $byte) {
                $crc ^= $byte;
                for ($i = 0; $i < 8; $i++) {
                    if ($crc & 0x0001) {
                        $crc = (($crc >> 1) ^ $polynomial) & 0xFFFF;
                    } else {
                        $crc >>= 1;
                    }
                }
            }
            return $crc;
    }

调用

php 复制代码
$ru = $this->CRC16($str2);

我对接MODBUS 协议 最后校验位是需要 转16进制后 调换位置

php 复制代码
 $ru = str_pad(dechex($ru), 4, '0', STR_PAD_LEFT);
 $str2 = $str2.substr($ru,-2).substr($ru,0,2);

相当于 后两位在前 , 前两位在后

感谢观看文章,

相关推荐
cypking8 分钟前
Nuxt项目内网服务器域名代理访问故障排查
运维·服务器·php
北极糊的狐20 分钟前
IDEA中安装 CamelCase 插件实现变量快速生成驼峰命名
开发语言·php
阿海5744 小时前
安装php7.4.33的shell脚本
php·shell
阿海5744 小时前
卸载php的shell脚本
开发语言·php
JienDa4 小时前
JienDa聊PHP:从Laravel到ThinkPHP的现代Web开发实践
前端·php·laravel
catchadmin5 小时前
PHP 8.5 容器化实战指南
开发语言·php
bleach-7 小时前
buuctf系列解题思路祥讲--[ZJCTF 2019]NiZhuanSiWei1——文件包含漏洞和伪协议的利用
安全·web安全·网络安全·php
随风@飘扬8 小时前
Linux下安装libmodbus库
linux·modbus
2501_941982059 小时前
复杂消息格式自动化:图片、视频和自定义卡片的消息体构造
开发语言·php
aml258__10 小时前
一、Cisco(OSPF邻居认证机制实验:明文与加密MD5对比)251211
网络·php·路由器·思科·ospf·端口认证·明文/md5