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

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

感谢观看文章,

相关推荐
这儿有一堆花2 分钟前
住宅代理(Residential Proxy)技术指南
开发语言·数据库·php
niucloud-admin1 小时前
PHP V6 单商户常见问题——升级提示mkdir()处理方案
php
计算机安禾3 小时前
【Linux从入门到精通】第37篇:NFS网络文件系统——无状态的数据共享
linux·网络·php
2401_873479404 小时前
深度解析IP查询工具与普通IP库的核心区别:选型指南与业务场景对照
网络协议·tcp/ip·php
张晓℡¹⁸⁰³⁷¹⁸²⁵⁵⁸4 小时前
海外盲盒APP玩法集合,海外盲盒多国语言
小程序·php
WHS-_-20225 小时前
Attention-Guided Low-Rank Tensor Completion
开发语言·php
m0_738120727 小时前
后渗透维权提权基础——CTF模拟红队进行权限维持(一)
服务器·前端·python·安全·web安全·php
a8a3027 小时前
Laravel 8.x新特性全解析
php·laravel
niucloud-admin17 小时前
PHP V6 单商户常见问题——云编译报SSL证书错误的处理方案
php