CRC8-Check in PHP

时间:2009-02-03 13:22:38

标签: php checksum crc

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

2 个答案:

答案 0 :(得分:0)

它必须是CRC8吗?

在PHP.net上有一个非常简单的CRC16实现和CRC32的原生版本。

如果它必须是CRC8,我会建议在维基百科页面上的sudo代码中编写一些东西,Marius指出。

答案 1 :(得分:0)

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