(PHP 4 >= 4.0.1, PHP 5)
crc32 — 文字列の crc32 多項式計算を行う
$str
)
str
の 32 ビット長の CRC (cyclic redundancy
checksum) チェックサムを生成します。
これは通常、送信したデータの整合性を検証するために使用します。
PHP の整数型は符号付きで、多くの crc32 チェックサムは 32 ビットシステム上では負の整数になります。 しかし、64 ビット環境では crc32() の結果はすべて正の整数となります。
つまり、符号なしの crc32() チェックサムの文字列表記を 十進形式で取得するには、 sprintf() もしくは printf() の "%u" フォーマッタを使う必要があります。
チェックサムの十六進表記を取得するには、 sprintf() あるいは printf() の "%x" フォーマッタを使うか、あるいは変換関数 dechex() を使います。これらはいずれも、 crc32() の結果を符号なし整数に変換することも行います。
64 ビット環境でも、返り値が大きくなると負の整数を返すことが考えられます。 その場合は十六進変換がうまくいかないので、負の整数については オフセット 0xFFFFFFFF######## を与えます。 十六進表現は最もよく使われる形式なので、この処理が壊れないようにしました。 32 ビット環境から 64 ビット環境に移したときに ほぼ 50% の確率で十進形式での比較が失敗してしまいますが、 それよりも十六進表記のほうを優先したのです。
今思えば、この関数が整数値を返すようにしたというのがまずい判断でした。 最初から、 md5() のように十六進形式の文字列をを直接返すようにしておけばよかったのでしょう。
移植性を考慮した選択肢として、より汎用的な
hash() を使う方法もあります。
hash("crc32b", $str)
は
dechex(crc32($str))
と同じ文字列を返します。
str
データ。
str
の crc32 チェックサムを整数値で返します。
例1 crc32 チェックサムの表示
この例は printf() 関数を用いた変換後のチェックサムの表示方法を示しています。
<?php
$checksum = crc32("The quick brown fox jumped over the lazy dog.");
printf("%u\n", $checksum);
?>