public function generate()
    {
        $elts = array(
            uniqid(),
            mt_rand(),
            getmypid(),
            spl_object_hash($this)
        );
        if (function_exists('zend_thread_id')) {
            $elts[] = zend_thread_id();
        }
        if (function_exists('sys_getloadavg') &&
            ($loadavg = sys_getloadavg())) {
            $elts = array_merge($elts, $loadavg);
        }
        if (function_exists('memory_get_usage')) {
            $elts[] = memory_get_usage();
            $elts[] = memory_get_peak_usage();
        }

        shuffle($elts);

        /* Base64 can have /, +, and = characters. Restrict to URL-safe
         * characters. */
        return substr(str_replace(
            array('/', '+', '='),
            array('-', '_', ''),
            base64_encode(hash('sha1', serialize($elts), true))
        ), 0, 23);
    }