note 111699 added to function.crc32
| From: | i at morfi dot ru | Date: | Mon, 18 Mar 2013 13:16:35 +0000 |
| Subject: | note 111699 added to function.crc32 | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-194109@lists.php.net to get a copy of this message | ||
Implementation crc64() in php 64bit
<?php
/**
* @return array
*/
function crc64Table()
{
$crc64tab = [];
// ECMA polynomial
$poly64rev = (0xC96C5795 << 32) | 0xD7870F42;
// ISO polynomial
// $poly64rev = (0xD8 << 56);
for ($i = 0; $i < 256; $i++)
{
for ($part = $i, $bit = 0; $bit < 8; $bit++) {
if ($part & 1) {
$part = (($part >> 1) & ~(0x8 << 60)) ^ $poly64rev;
} else {
$part = ($part >> 1) & ~(0x8 << 60);
}
}
$crc64tab[$i] = $part;
}
return $crc64tab;
}
/**
* @param string $string
* @param string $format
* @return mixed
*
* Formats:
* crc64('php'); // afe4e823e7cef190
* crc64('php', '0x%x'); // 0xafe4e823e7cef190
* crc64('php', '0x%X'); // 0xAFE4E823E7CEF190
* crc64('php', '%d'); // -5772233581471534704 signed int
* crc64('php', '%u'); // 12674510492238016912 unsigned int
*/
function crc64($string, $format = '%x')
{
static $crc64tab;
if ($crc64tab === null) {
$crc64tab = crc64Table();
}
$crc = 0;
for ($i = 0; $i < strlen($string); $i++) {
$crc = $crc64tab[($crc ^ ord($string[$i])) & 0xff] ^ (($crc >> 8) & ~(0xff
<< 56));
}
return sprintf($format, $crc);
}
----
Server IP: 69.147.83.199
Probable Submitter: 109.167.210.157
----
Manual Page -- http://php.net/manual/en/function.crc32.php
Edit -- https://master.php.net/note/edit/111699
Del: integrated -- https://master.php.net/note/delete/111699/integrated
Del: useless -- https://master.php.net/note/delete/111699/useless
Del: bad code -- https://master.php.net/note/delete/111699/bad+code
Del: spam -- https://master.php.net/note/delete/111699/spam
Del: non-english -- https://master.php.net/note/delete/111699/non-english
Del: in docs -- https://master.php.net/note/delete/111699/in+docs
Del: other reasons-- https://master.php.net/note/delete/111699
Reject -- https://master.php.net/note/reject/111699
Search -- https://master.php.net/manage/user-notes.php