function misc_related_string_id($s) { $t = misc_get_keywords($s, 0); // isalnum $a = explode(' ', $t); usort($a, 'misc_related_string_id_sort'); // fabricate 32bit id from 4 longest keywords $id = 0; for ($i = 0; isset($a[$i]) && $i < 4; $i++) { $id <<= 8; $id |= misc_crc8($a[$i]) & 0xff; } return $id & 4294967295.0; }
<?php function misc_crc8($s, $crc = 0) { $polynomial = 0x1070 << 3; $len = strlen($s); for ($i = 0; $i < $len; $i++) { $crc ^= ord($s[$i]); $crc <<= 8; for ($j = 0; $j < 8; $j++) { if (($crc & 0x8000) != 0) { $crc ^= $polynomial; } $crc <<= 1; } $crc = $crc >> 8 & 0xff; } return $crc; } echo sprintf("%x", misc_crc8("test"));