(PHP 4 >= 4.0.1, PHP 5, PHP 7, PHP 8)
crc32 — 计算一个字符串的 crc32 多项式
$string
): int
生成 string
的 32 位循环冗余校验和多项式。这通常用于检查正在传输的数据是否完整。
由于 PHP 的整数类型是有符号的,所以在 32 位系统上许多 crc32 校验和将产生负整数。不过在 64 位上所有 crc32() 的结果将都是正整数。
因此需要使用 sprintf() 或 printf() 的“%u”格式标志符获取十进制格式的无符号 crc32 校验和的字符串表示形式。
对于十六进制的校验和可以使用 sprintf() 或 printf() 的“%x”格式标志符或 dechex() 转换程序,这两个函数负责将 crc32() 结果转为无符号整数。
64 位的设备也会返回负数,更高的结果值会破坏十六进制转换,因为负数会得到额外的 0xFFFFFFFF######## 偏移量。由于十六进制似乎是最常见的用例,所以决定不破坏该原则,即使从 32 位移动到 64 位时破坏了大约 50% 的十进制直接比较。
回想一下,让函数返回整数可能不是最好的主意,而立即返回十六进制的字符串(例如 md5())可能是更好的开始。
可移植方案可以考虑通用的 hash()。hash("crc32b", $str)
返回跟 str_pad(dechex(crc32($str)), 8, '0', STR_PAD_LEFT)
相同的字符串。
string
要校验的数据。
以整数形式返回 string
的 crc32 校验和。
示例 #1 显示 crc32 校验和
示例中演示了如何使用 printf() 函数打印转换后的校验和:
<?php
$checksum = crc32("The quick brown fox jumped over the lazy dog.");
printf("%u\n", $checksum);
?>