static function decodeId($id) { if (!$id) { return array(false, '', ''); } $result = ''; $len = strlen($id); $i = 0; $replacements = array('z' => 'z', 'a' => '+', 'b' => '/', 'c' => '='); while ($i < $len - 1) { $r = $id[$i]; $c1 = $id[$i]; ++$i; if ($c1 == 'z') { $c2 = $id[$i]; if (isset($replacements[$c2])) { $r = $replacements[$c2]; ++$i; } } $result .= $r; } if ($i < $len) { $result .= $id[$i]; } $result = bin2hex(base64_decode($result)); $a = substr($result, 0, 32); $b = substr($result, 32, 32); $secret = Q_Config::get('Q', 'external', 'secret', null); $c = isset($secret) ? $b === substr(Q_Utils::hmac('sha1', $a, $secret), 0, 32) : true; return array($c, $a, $b); }