2

PHPでCRC-8チェックサムを生成するにはどうすればよいですか?

4

2 に答える 2

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));
于 2010-04-03T21:57:54.890 に答える
0

CRC8である必要はありますか?

PHP.net には、CRC16の非常に単純な実装とCRC32のネイティブ バージョンがあります。

CRC8 でなければならない場合は、マリウスが指摘したウィキペディアのページにある疑似コードから何かをコーディングすることをお勧めします。

于 2009-02-03T21:14:34.530 に答える