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

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

感谢观看文章,

相关推荐
Jerry_Gao9213 小时前
【CTF】【ez-upload】FrankenPHP(v1.11.1)Unicode路径解析漏洞
安全·php·ctf·frankenphp
сокол20 小时前
【网安-Web渗透测试-漏洞系列】RCE漏洞
web安全·php
Jerry_Gao9211 天前
【CTF】【ez-rce】无字母数字绕过正则表达式
正则表达式·php·ctf
~央千澈~1 天前
优雅草正版授权系统 - 优雅草科技开源2月20日正式发布
python·vue·php·授权验证系统
盖头盖2 天前
【PHP_原生函数的利用】
php
Hello_Embed2 天前
Modbus 传感器开发:从寄存器规划到点表设计
笔记·stm32·单片机·学习·modbus
JienDa2 天前
HaiO安装与快速开始
开发语言·php
~央千澈~2 天前
抖音弹幕游戏开发之第16集:异常处理与稳定性·优雅草云桧·卓伊凡
开发语言·php
JienDa2 天前
Haio · 海鸥 - 企业级插件化应用平台
开发语言·php
Hello_Embed3 天前
Modbus 传感器开发:STM32F030 libmodbus 移植
笔记·stm32·学习·freertos·modbus