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

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

感谢观看文章,

相关推荐
stwood0071 小时前
如何在 EC-CUBE 4 中为产品图像启用 WebP 格式图像
php
一人の梅雨1 小时前
VVIC图片搜索接口进阶实战:服装批发场景下的精准识图与批量调度方案
开发语言·机器学习·php
m0_748229992 小时前
Laravel 2.x:框架的早期特性解析
php·laravel
云游云记3 小时前
php JWT 使用全攻略(firebase/php-jwt 实践笔记)
php·jwt
三七吃山漆4 小时前
[网鼎杯 2020 朱雀组]phpweb
php·ctf·网鼎杯
CHU7290354 小时前
一番赏盲盒抽卡机小程序:解锁惊喜体验与社交乐趣的多元功能设计
前端·小程序·php
njmanong7 小时前
2026年海外代理IP实测:青果网络,bright data,iproyal,ipdodo,kookeey,oxylabs
网络·tcp/ip·php
云游云记8 小时前
ThinkPHP 队列扩展 (topthink/think-queue) 使用笔记
php·thinkphp·think-queue
GodGump9 小时前
从割草图到CSP压缩:大图计算的“减肥术”与“快照术”
服务器·开发语言·php
CS创新实验室9 小时前
《计算机网络》深入学:拥塞控制
开发语言·计算机网络·php