function mix($string) { $mixed = preg_replace_callback("/\\{([^\\{]*)\\}/U", function ($match) { $variants = explode('|', $match[1]); return $variants[array_rand($variants)]; }, $string, 1); if ($mixed === $string) { return $mixed; } else { return mix($mixed); } }
function GoogleCH($url, $length = null, $init = GOOGLE_MAGIC) { if (is_null($length)) { $length = sizeof($url); } $a = $b = 0x9e3779b9; $c = $init; $k = 0; $len = $length; while ($len >= 12) { $a += $url[$k + 0] + ($url[$k + 1] << 8) + ($url[$k + 2] << 16) + ($url[$k + 3] << 24); $b += $url[$k + 4] + ($url[$k + 5] << 8) + ($url[$k + 6] << 16) + ($url[$k + 7] << 24); $c += $url[$k + 8] + ($url[$k + 9] << 8) + ($url[$k + 10] << 16) + ($url[$k + 11] << 24); $mix = mix($a, $b, $c); $a = $mix[0]; $b = $mix[1]; $c = $mix[2]; $k += 12; $len -= 12; } $c += $length; switch ($len) { case 11: $c += $url[$k + 10] << 24; case 10: $c += $url[$k + 9] << 16; case 9: $c += $url[$k + 8] << 8; case 8: $b += $url[$k + 7] << 24; case 7: $b += $url[$k + 6] << 16; case 6: $b += $url[$k + 5] << 8; case 5: $b += $url[$k + 4]; case 4: $a += $url[$k + 3] << 24; case 3: $a += $url[$k + 2] << 16; case 2: $a += $url[$k + 1] << 8; case 1: $a += $url[$k + 0]; } $mix = mix($a, $b, $c); return $mix[2]; }
function GCH($url, $length = null, $init = GMAG) { if (is_null($length)) { $length = sizeof($url); } $a = $b = 0.0; $c = $init; $k = 0; $len = $length; while ($len >= 12) { $a += $url[$k + 0] + ($url[$k + 1] << 8) + ($url[$k + 2] << 16) + ($url[$k + 3] << 24); $b += $url[$k + 4] + ($url[$k + 5] << 8) + ($url[$k + 6] << 16) + ($url[$k + 7] << 24); $c += $url[$k + 8] + ($url[$k + 9] << 8) + ($url[$k + 10] << 16) + ($url[$k + 11] << 24); $mix = mix($a, $b, $c); $a = $mix[0]; $b = $mix[1]; $c = $mix[2]; $k += 12; $len -= 12; } $c += $length; switch ($len) { /* all the case statements fall through */ case 11: $c += $url[$k + 10] << 24; case 10: $c += $url[$k + 9] << 16; case 9: $c += $url[$k + 8] << 8; /* the first byte of c is reserved for the length */ /* the first byte of c is reserved for the length */ case 8: $b += $url[$k + 7] << 24; case 7: $b += $url[$k + 6] << 16; case 6: $b += $url[$k + 5] << 8; case 5: $b += $url[$k + 4]; case 4: $a += $url[$k + 3] << 24; case 3: $a += $url[$k + 2] << 16; case 2: $a += $url[$k + 1] << 8; case 1: $a += $url[$k + 0]; /* case 0: nothing left to add */ } $mix = mix($a, $b, $c); /*-------------------------------------------- report the result */ return $mix[2]; }
function GCH($url, $length = null) { $length = sizeof($url); $a = $b = 2654435769; $c = 3862272608; $k = 0; $len = $length; while ($len >= 12) { $a += $url[$k + 0] + ($url[$k + 1] << 8) + ($url[$k + 2] << 16) + ($url[$k + 3] << 24); $b += $url[$k + 4] + ($url[$k + 5] << 8) + ($url[$k + 6] << 16) + ($url[$k + 7] << 24); $c += $url[$k + 8] + ($url[$k + 9] << 8) + ($url[$k + 10] << 16) + ($url[$k + 11] << 24); $mix = mix($a, $b, $c); $a = $mix[0]; $b = $mix[1]; $c = $mix[2]; $k += 12; $len -= 12; } $c += $length; switch ($len) { case 11: $c += $url[$k + 10] << 24; case 10: $c += $url[$k + 9] << 16; case 9: $c += $url[$k + 8] << 8; case 8: $b += $url[$k + 7] << 24; case 7: $b += $url[$k + 6] << 16; case 6: $b += $url[$k + 5] << 8; case 5: $b += $url[$k + 4]; case 4: $a += $url[$k + 3] << 24; case 3: $a += $url[$k + 2] << 16; case 2: $a += $url[$k + 1] << 8; case 1: $a += $url[$k + 0]; } $mix = mix($a, $b, $c); return $mix[2] < 0 ? 4294967296 + $mix[2] : $mix[2]; }