您的位置:首页 > 新闻 > 热点要闻 > 郑州狼牙网页设计公司_福州开发公司_网站权重是什么意思_seo入门培训

郑州狼牙网页设计公司_福州开发公司_网站权重是什么意思_seo入门培训

2025/1/9 10:38:56 来源:https://blog.csdn.net/cybersnow/article/details/144560689  浏览:    关键词:郑州狼牙网页设计公司_福州开发公司_网站权重是什么意思_seo入门培训
郑州狼牙网页设计公司_福州开发公司_网站权重是什么意思_seo入门培训

<?php
/**
 * 将一个字符按比特位进行反转 eg: 65 (01000001) --> 130(10000010)
 * @param $char
 * @return $char
 */
function reverseChar($char) {
    $byte = ord($char);
    $tmp = 0;
    for ($i = 0; $i < 8; ++$i) {
        if ($byte & (1 << $i)) {
            $tmp |= (1 << (7 - $i));
        }
    }
    return chr($tmp);
}
 
/**
 * 将一个字节流按比特位反转 eg: 'AB'(01000001 01000010)  --> '\x42\x82'(01000010 10000010)
 * @param $str
 */
function reverseString($str) {
    $m = 0;
    $n = strlen($str) - 1;
    while ($m <= $n) {
        if ($m == $n) {
            $str{$m} = reverseChar($str{$m});
            break;
        }
        $ord1 = reverseChar($str{$m});
        $ord2 = reverseChar($str{$n});
        $str{$m} = $ord2;
        $str{$n} = $ord1;
        $m++;
        $n--;
    }
    return $str;
}
 
/**
 * @param string $str 待校验字符串
 * @param int $polynomial 二项式
 * @param int $initValue 初始值
 * @param int $xOrValue 输出结果前异或的值
 * @param bool $inputReverse 输入字符串是否每个字节按比特位反转
 * @param bool $outputReverse 输出是否整体按比特位反转
 * @return int
 */
function crc16($str, $polynomial, $initValue, $xOrValue, $inputReverse = false, $outputReverse = false) {
    $crc = $initValue;
 
    for ($i = 0; $i < strlen($str); $i++) {
        if ($inputReverse) {
            // 输入数据每个字节按比特位逆转
            $c = ord(reverseChar($str{$i}));
        } else {
            $c = ord($str{$i});
        }
        $crc ^= ($c << 8);
        for ($j = 0; $j < 8; ++$j) {
            if ($crc & 0x8000) {
                $crc = (($crc << 1) & 0xffff) ^ $polynomial;
            } else {
                $crc = ($crc << 1) & 0xffff;
            }
        }
    }
    if ($outputReverse) {
        // 把低地址存低位,即采用小端法将整数转换为字符串
        $ret = pack('cc', $crc & 0xff, ($crc >> 8) & 0xff);
        // 输出结果按比特位逆转整个字符串
        $ret = reverseString($ret);
        // 再把结果按小端法重新转换成整数
        $arr = unpack('vshort', $ret);
        $crc = $arr['short'];
    }
    return $crc ^ $xOrValue;
}
 
printf("%x\n", crc16('1234567890', 0x8005, 0, 0, true, true));
//0A 09 02 01 03
printf("%x\n", crc16('0A 09 02 01 03', 0x8005, 0, 0, true, true));
printf("%x\n", crc16('0A09020103', 0x8005, 0, 0, true, true));
echo "<br>";
printf("%x\n", crc16('0A 09 02 01 03', 0x8005, 0xffff, 0, true, true));
printf("%x\n", crc16('0A09020103', 0x8005, 0xffff, 0, true, true));
echo "<br>";
/* 列举一些常用的crc16算法 */
 
// CRC-16/IBM
printf("%x\n", crc16('0A 09 02 01 03', 0x8005, 0, 0, true, true));
 
// CRC-16/MAXIM
printf("%x\n", crc16('0A 09 02 01 03', 0x8005, 0, 0xffff, true, true));
 
// CRC-16/USB
printf("%x\n", crc16('0A 09 02 01 03', 0x8005, 0xffff, 0xffff, true, true));
 
// CRC-16/MODBUS
printf("%x\n", crc16('0A 09 02 01 03', 0x8005, 0xffff, 0, true, true));
 
// CRC-16/CCITT
printf("%x\n", crc16('0A 09 02 01 03', 0x1021, 0, 0, true, true));
 
// CRC-16/CCITT-FALSE
printf("%x\n", crc16('0A 09 02 01 03', 0x1021, 0xffff, 0, false, false));
 
// CRC-16/X25
printf("%x\n", crc16('0A 09 02 01 03', 0x1021, 0xffff, 0xffff, true, true));
 
// CRC-16/XMODEM
printf("%x\n", crc16('0A 09 02 01 03', 0x1021, 0, 0, false, false));
 
// CRC-16/DNP
printf("%x\n", crc16('0A 09 02 01 03', 0x3d65, 0, 0xffff, true, true));

echo "<br>0A09020103<br>";
// CRC-16/IBM
printf("%x\n", crc16('0A09020103', 0x8005, 0, 0, true, true));
 
// CRC-16/MAXIM
printf("%x\n", crc16('0A09020103', 0x8005, 0, 0xffff, true, true));
 
// CRC-16/USB
printf("%x\n", crc16('0A09020103', 0x8005, 0xffff, 0xffff, true, true));
 
// CRC-16/MODBUS
printf("%x\n", crc16('0A09020103', 0x8005, 0xffff, 0, true, true));
 
// CRC-16/CCITT
printf("%x\n", crc16('0A09020103', 0x1021, 0, 0, true, true));
 
// CRC-16/CCITT-FALSE
printf("%x\n", crc16('0A09020103', 0x1021, 0xffff, 0, false, false));
 
// CRC-16/X25
printf("%x\n", crc16('0A 09 02 01 03', 0x1021, 0xffff, 0xffff, true, true));
 
// CRC-16/XMODEM
printf("%x\n", crc16('0A09020103', 0x1021, 0, 0, false, false));
 
// CRC-16/DNP
printf("%x\n", crc16('0A09020103', 0x3d65, 0, 0xffff, true, true));

$crc_table = array(
    0x0,  0x1021,  0x2042,  0x3063,  0x4084,  0x50a5,  0x60c6,  0x70e7,
        0x8108,  0x9129,  0xa14a,  0xb16b,  0xc18c,  0xd1ad,  0xe1ce,  0xf1ef,
        0x1231,  0x210,  0x3273,  0x2252,  0x52b5,  0x4294,  0x72f7,  0x62d6,
        0x9339,  0x8318,  0xb37b,  0xa35a,  0xd3bd,  0xc39c,  0xf3ff,  0xe3de,
        0x2462,  0x3443,  0x420,  0x1401,  0x64e6,  0x74c7,  0x44a4,  0x5485,
        0xa56a,  0xb54b,  0x8528,  0x9509,  0xe5ee,  0xf5cf,  0xc5ac,  0xd58d,
        0x3653,  0x2672,  0x1611,  0x630,  0x76d7,  0x66f6,  0x5695,  0x46b4,
        0xb75b,  0xa77a,  0x9719,  0x8738,  0xf7df,  0xe7fe,  0xd79d,  0xc7bc,
        0x48c4,  0x58e5,  0x6886,  0x78a7,  0x840,  0x1861,  0x2802,  0x3823,
        0xc9cc,  0xd9ed,  0xe98e,  0xf9af,  0x8948,  0x9969,  0xa90a,  0xb92b,
        0x5af5,  0x4ad4,  0x7ab7,  0x6a96,  0x1a71,  0xa50,  0x3a33,  0x2a12,
        0xdbfd,  0xcbdc,  0xfbbf,  0xeb9e,  0x9b79,  0x8b58,  0xbb3b,  0xab1a,
        0x6ca6,  0x7c87,  0x4ce4,  0x5cc5,  0x2c22,  0x3c03,  0xc60,  0x1c41,
        0xedae,  0xfd8f,  0xcdec,  0xddcd,  0xad2a,  0xbd0b,  0x8d68,  0x9d49,
        0x7e97,  0x6eb6,  0x5ed5,  0x4ef4,  0x3e13,  0x2e32,  0x1e51,  0xe70,
        0xff9f,  0xefbe,  0xdfdd,  0xcffc,  0xbf1b,  0xaf3a,  0x9f59,  0x8f78,
        0x9188,  0x81a9,  0xb1ca,  0xa1eb,  0xd10c,  0xc12d,  0xf14e,  0xe16f,
        0x1080,  0xa1,  0x30c2,  0x20e3,  0x5004,  0x4025,  0x7046,  0x6067,
        0x83b9,  0x9398,  0xa3fb,  0xb3da,  0xc33d,  0xd31c,  0xe37f,  0xf35e,
        0x2b1,  0x1290,  0x22f3,  0x32d2,  0x4235,  0x5214,  0x6277,  0x7256,
        0xb5ea,  0xa5cb,  0x95a8,  0x8589,  0xf56e,  0xe54f,  0xd52c,  0xc50d,
        0x34e2,  0x24c3,  0x14a0,  0x481,  0x7466,  0x6447,  0x5424,  0x4405,
        0xa7db,  0xb7fa,  0x8799,  0x97b8,  0xe75f,  0xf77e,  0xc71d,  0xd73c,
        0x26d3,  0x36f2,  0x691,  0x16b0,  0x6657,  0x7676,  0x4615,  0x5634,
        0xd94c,  0xc96d,  0xf90e,  0xe92f,  0x99c8,  0x89e9,  0xb98a,  0xa9ab,
        0x5844,  0x4865,  0x7806,  0x6827,  0x18c0,  0x8e1,  0x3882,  0x28a3,
        0xcb7d,  0xdb5c,  0xeb3f,  0xfb1e,  0x8bf9,  0x9bd8,  0xabbb,  0xbb9a,
        0x4a75,  0x5a54,  0x6a37,  0x7a16,  0xaf1,  0x1ad0,  0x2ab3,  0x3a92,
        0xfd2e,  0xed0f,  0xdd6c,  0xcd4d,  0xbdaa,  0xad8b,  0x9de8,  0x8dc9,
        0x7c26,  0x6c07,  0x5c64,  0x4c45,  0x3ca2,  0x2c83,  0x1ce0,  0xcc1,
        0xef1f,  0xff3e,  0xcf5d,  0xdf7c,  0xaf9b,  0xbfba,  0x8fd9,  0x9ff8,
        0x6e17,  0x7e36,  0x4e55,  0x5e74,  0x2e93,  0x3eb2,  0xed1,  0x1ef0);
//0A09020103
function genCRC (&$ptr)
{
    $crc = 0x0000;
    $crc_table = $GLOBALS['crc_table'];
    for ($i = 0; $i < strlen($ptr); $i++)
        $crc =  $crc_table[(($crc>>8) ^ ord($ptr[$i]))] ^ (($crc<<8) & 0x00FFFF);
    return $crc;
}

    function  crc162( $string ) {
       $crc  = 0xFFFF;
       for  ( $x  = 0;  $x  <  strlen  ( $string );  $x ++) {
         $crc  =  $crc  ^ ord( $string [ $x ]);
         for  ( $y  = 0;  $y  < 8;  $y ++) {
           if  (( $crc  & 0x0001) == 0x0001) {
             $crc  = (( $crc  >> 1) ^ 0xA001);
           }  else  {  $crc  =  $crc  >> 1; }
         }
       }
       return  $crc ;
}
    $test = chr(0x0A).chr(0x09).chr(0x02).chr(0x01).chr(0x03); // CRC16-CCITT = 0xE2B4
  echo "<BR>".   genCRC ($test);

echo  "<BR>". crc162("0A09020103");


function crc16LSBMSB($data) {
    $crc = 0x0000; // 初始值,对于LSB-MSB模式常见初始值设为0x0000
    $poly = 0xA001; // CRC16(LSB-MSB)对应的多项式

    for ($i = 0; $i < strlen($data); $i++) {
        $crc ^= ord($data[$i]);
        for ($j = 0; $j < 8; $j++) {
            if ($crc & 0x0001) {
                $crc = ($crc >> 1) ^ $poly;
            } else {
                $crc >>= 1;
            }
            $crc &= 0xFFFF; // 确保crc值保持在16位范围内
        }
    }

    return $crc;
}

// 示例用法
$data = "Hello, World!";
$crcValue = crc16LSBMSB($data);
echo "CRC-16(LSB-MSB)值为: ".dechex($crcValue)."\n";

//0A09020103
$data = "0A 09 02 01 03";
$crcValue = crc16LSBMSB($data);
echo "<BR>CRC-16(LSB-MSB)值为: ".dechex($crcValue)."\n";


function crc16MSBLSB($data) {
    $crc = 0xFFFF; // 初始值,CRC-16(MSB-LSB)常用的初始值设定为0xFFFF
    $poly = 0x8005; // CRC-16(MSB-LSB)对应的多项式

    for ($i = 0; $i < strlen($data); $i++) {
        $crc ^= ord($data[$i]) << 8;
        for ($j = 0; $j < 8; $j++) {
            if ($crc & 0x8000) {
                $crc = ($crc << 1) ^ $poly;
            } else {
                $crc <<= 1;
            }
            $crc &= 0xFFFF; // 确保crc值保持在16位范围内
        }
    }

    return $crc;
}
 
$data = "0A 09 02 01 03";
$crcValue = crc16MSBLSB($data);
echo "<BR>33333333333==CRC-16(LSB-MSB)值为: ".dechex($crcValue)."\n";

$data = "0A09020103";
$crcValue = crc16MSBLSB($data);
echo "<BR>33333333333==CRC-16(LSB-MSB)值为: ".dechex($crcValue)."\n";


function hexToByteArray($hexString) {
    $byteArray = [];
    $length = strlen($hexString);
    for ($i = 0; $i < $length; $i += 2) {
        $byteArray[] = hexdec(substr($hexString, $i, 2));
    }
    return $byteArray;
}

function crc16MSBLSB东方($dataArray) {
    $crc = 0xFFFF;
    $poly = 0x8005;

    for ($i = 0; $i < count($dataArray); $i++) {
        $crc ^= $dataArray[$i] << 8;
        for ($j = 0; $j < 8; $j++) {
            if ($crc & 0x8000) {
                $crc = ($crc << 1) ^ $poly;
            } else {
                $crc <<= 1;
            }
            $crc &= 0xFFFF;
        }
    }

    return $crc;
}

// 示例用法
$hexData = "0A09020103";
$byteArray = hexToByteArray($hexData);
echo "<br>CRC-16(MSB-LSB)值为: ".$byteArray."\n";
$crcValue = crc16MSBLSB东方($byteArray);
echo "<br>CRC-16(MSB-LSB)值为: ".dechex($crcValue)."\n";

 ?>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com