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);

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

感谢观看文章,

相关推荐
last demo2 小时前
iscsi服务器
linux·运维·服务器·php
q***42054 小时前
PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
开发语言·redis·php
苦瓜炒蛋挞4 小时前
小迪安全第二十二天-安全开发-PHP应用&数据库操作&留言板功能&第三方插件
数据库·网络安全·php·小迪安全
q***42825 小时前
IPV6公网暴露下的OPENWRT防火墙安全设置(只允许访问局域网中指定服务器指定端口其余拒绝)
服务器·安全·php
BingoGo6 小时前
# 9 个步骤教你如何安全地迁移数据库或字段
后端·php
流浪猪头拯救地球7 小时前
利用 Python 解密 / 加密 PDF 文件
python·pdf·php
JaguarJack8 小时前
9 个步骤教你如何安全地迁移数据库或字段
php·服务端
Jtti9 小时前
PHP项目缓存占用硬盘过大?目录清理与优化
java·缓存·php
catchadmin9 小时前
使用 PHP 和 Raylib 也可以开发贪吃蛇游戏
开发语言·游戏·php
地衣君10 小时前
Wordpress 插件 TOC+(Table of Contents Plus) 不支持多路径生成目录的 bug 修复
php·wordpress