CRC16 For PHP

随着物联网技术的发展和普及,作为最好的语言 PHP 也难免会遇上与硬件设备数据对接的情况。在数据通信领域中有一种查错校验码,CRC。
在 PHP 官网上搜索了一下,只提供 CRC32 的相关的函数,关于 CRC16 我自己封装了一个方法用于校验计算。然后我将代码整理了一番,已发布到 GitHub,有需要的同学可以去看下,或许我们可以共同维护他。项目地址CRC16ForPHP

具体实现代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function crc16Modbus($str)
{
$data = pack('H*', $str);
$crc = 0xFFFF;
for ($i = 0; $i < strlen($data); $i++) {
$crc ^= ord($data[$i]);
for ($j = 8; $j != 0; $j--) {
if (($crc & 0x0001) != 0) {
$crc >>= 1;
$crc ^= 0xA001;
} else $crc >>= 1;
}
}
return sprintf('%04X', $crc);
}

用法:

1
echo crc16('010301180001').PHP_EOL;

坚持原创技术分享,您的支持将鼓励我继续创作!