function HashURL($String) { $Check1 = StrToNum($String, 0x1505, 0x21); $Check2 = StrToNum($String, 0, 0x1003f); $Check1 >>= 2; $Check1 = $Check1 >> 4 & 0x3ffffc0 | $Check1 & 0x3f; $Check1 = $Check1 >> 4 & 0x3ffc00 | $Check1 & 0x3ff; $Check1 = $Check1 >> 4 & 0x3c000 | $Check1 & 0x3fff; $T1 = (($Check1 & 0x3c0) << 4 | $Check1 & 0x3c) << 2 | $Check2 & 0xf0f; $T2 = (($Check1 & 0xffffc000) << 4 | $Check1 & 0x3c00) << 0xa | $Check2 & 0xf0f0000; return $T1 | $T2; }
function HashURL($String) { $Check1 = StrToNum($String, 0x1505, 0x21); $Check2 = StrToNum($String, 0, 0x1003F); $Check1 >>= 2; $Check1 = (($Check1 >> 4) & 0x3FFFFC0 ) | ($Check1 & 0x3F); $Check1 = (($Check1 >> 4) & 0x3FFC00 ) | ($Check1 & 0x3FF); $Check1 = (($Check1 >> 4) & 0x3C000 ) | ($Check1 & 0x3FFF); $T1 = (((($Check1 & 0x3C0) << 4) | ($Check1 & 0x3C)) <<2 ) | ($Check2 & 0xF0F ); $T2 = (((($Check1 & 0xFFFFC000) << 4) | ($Check1 & 0x3C00)) << 0xA) | ($Check2 & 0xF0F0000 ); return ($T1 | $T2); }
} $CheckByte >>= 1; } } return '7' . $CheckByte . $HashStr; } function HashURL($String) { function StrToNum($Str, $Check, $Magic) { $Int32Unit = 4294967296; // 2^32 $length = strlen($Str); for ($i = 0; $i < $length; $i++) { $Check *= $Magic; //If the float is beyond the boundaries of integer (usually +/- 2.15e+9 = 2^31), // the result of converting to integer is undefined // refer to http://www.php.net/manual/en/language.types.integer.php if ($Check >= $Int32Unit) { $Check = $Check - $Int32Unit * (int) ($Check / $Int32Unit); //if the check less than -2^31 $Check = $Check < -2147483648 ? $Check + $Int32Unit : $Check; } $Check += ord($Str[$i]); } return $Check; } $Check1 = StrToNum($String, 0x1505, 0x21); $Check2 = StrToNum($String, 0, 0x1003f); $Check1 >>= 2; $Check1 = $Check1 >> 4 & 0x3ffffc0 | $Check1 & 0x3f;