php - PHP 中的 CRC8 校验

标签 php checksum crc

如何在 PHP 中生成 CRC-8 校验和?

最佳答案

function crcnifull ($dato, $byte)
{
  static $PolyFull=0x8c;

  for ($i=0; $i<8; $i++)
  {
    $x=$byte&1;
    $byte>>=1;
    if ($dato&1) $byte|=0x80;
    if ($x) $byte^=$PolyFull;
    $dato>>=1;
  }
  return $byte;
}

function crc8 (array $ar,$n=false)
{
  if ($n===false) $n=count($ar);
  $crcbyte=0;
  for ($i=0; $i<$n; $i++) $crcbyte=crcnifull($ar[$i], $crcbyte);
  return $crcbyte;
}

要将此函数用于二进制字符串,您必须先将二进制字符串转换为数组。可以这样实现:

function sbin2ar($sbin)
{
  $ar=array();
  $ll=strlen($sbin);
  for ($i=0; $i<$ll; $i++) $ar[]=ord(substr($sbin,$i,1));
  return $ar;
}

如何使用整个东西的例子:

$crc8=crc8(sbin2ar($packet));

关于php - PHP 中的 CRC8 校验,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/507041/

相关文章:

Perl 十六进制 CRC-16 位脚本

php - 使用 bookworm 在 Docker 中为 PHP8.1 添加 Memcached 支持时出现问题

javascript - 表单中的默认值和用户输入

checksum - 我怎么能猜到校验和算法?

c# - 如何在C#中计算CRC_B

algorithm - 将 CRC32 和从 LSB 优先算法转换为 MSB 优先算法的和

php - 移动文件并将文件数据保存为空白时出现问题

php - php 中的 session_start() 会扰乱我的用户 session 长度吗?

c# - 通用 CRC (8/16/32/64) 组合实现

c++ - 如何保护 DLL 功能,或获取导入的位置?