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

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

感谢观看文章,

相关推荐
QQ_5110082851 天前
uniapp微信小程序网上饰品商城售卖系统php python物流
微信小程序·uni-app·php
码云骑士1 天前
为何VMware上云之路充满挑战?
运维·服务器·php
vickycheung31 天前
RK182X 如何在 RK3588 上进行应用测试
开发语言·php
taocarts_bidfans1 天前
后端开发实战:外贸独立站询盘接口防刷与数据安全优化方案
php·独立站·外贸独立站·taoify
marsh02061 天前
60 openclaw与物联网:连接物理世界的智能应用
开发语言·物联网·青少年编程·php·技术美术
zzqssliu1 天前
Taocarts库存锁定机制优化:彻底解决跨境代购商品超卖问题
java·linux·javascript·php
dog2501 天前
科斯定理与平坦随机网络的自然秩序
开发语言·网络·php
AI设计小站1 天前
GPT Image2国内可用方案实测:创客贴AI生成+分层编辑能力解析
人工智能·gpt·php
溜达的大象2 天前
服务器挂了等用户报障?我用Prometheus搭了一套监控告警,服务器出状况第一时间通知我
服务器·php·prometheus
专注VB编程开发20年2 天前
modbus有队列的库
人工智能·modbus