public static function pack16($num){
$b=pack('n',$num);
$s = unpack('H4s',$b)['s'];
return $s;
}
public static function stringToByteArray($str) {
$byteArr = [];
foreach(str_split($str,2) as $chunk){
$num = hexdec($chunk);
$byteArr[] = self::getIntByte($num);
}
return $byteArr;
}
public static function getIntByte($int)
{
$n = $int & 0x000000FF;
if (128 == ($n & 128)) {
return $n - 256;
} else {
return $n;
}
}
public static function crc_xiaoyan($str){
$arr = self::stringToByteArray($str);
$crc = 0x0000;
$polynomial = 0x1021;
foreach ($arr AS $b){
for ($i=0;$i<8;$i++){
$bit = ((intval($b)>>(7-$i)&1)==1);
$c15 = (($crc>>15 & 1)==1);
$crc<<=1;
if ($c15^$bit)$crc^=$polynomial;
}
}
$crc &= 0xffff;
$xiaoyan16 = self::pack16($crc);
return $xiaoyan16;
}
```D CRC 校验