public static function v3($namespace, $name)
    {
        if (!self::is_valid($namespace))
            return false;
        // Get hexadecimal components of namespace
        $nhex = str_replace(array('-', '{', '}'), '', $namespace);
        // Binary Value
        $nstr = '';
        // Convert Namespace UUID to bits
        for ($i = 0; $i < strlen($nhex); $i += 2) {
            $nstr .= chr(hexdec($nhex[$i] . $nhex[$i + 1]));
        }
        // Calculate hash value
        $hash = md5($nstr . $name);
        return sprintf('%08s-%04s-%04x-%04x-%12s',
            // 32 bits for "time_low"
            substr($hash, 0, 8),
            // 16 bits for "time_mid"
            substr($hash, 8, 4),
            // 16 bits for "time_hi_and_version",
            // four most significant bits holds version number 3
            (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000,
            // 16 bits, 8 bits for "clk_seq_hi_res",
            // 8 bits for "clk_seq_low",
            // two most significant bits holds zero and one for variant DCE1.1
            (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
            // 48 bits for "node"
            substr($hash, 20, 12)
        );
    }
public static function v3($namespace, $name)
    {
        if (!self::is_valid($namespace))
            return false;
        // Get hexadecimal components of namespace
        $nhex = str_replace(array('-', '{', '}'), '', $namespace);
        // Binary Value
        $nstr = '';
        // Convert Namespace UUID to bits
        for ($i = 0; $i < strlen($nhex); $i += 2) {
            $nstr .= chr(hexdec($nhex[$i] . $nhex[$i + 1]));
        }
        // Calculate hash value
        $hash = md5($nstr . $name);
        return sprintf('%08s-%04s-%04x-%04x-%12s',
            // 32 bits for "time_low"
            substr($hash, 0, 8),
            // 16 bits for "time_mid"
            substr($hash, 8, 4),
            // 16 bits for "time_hi_and_version",
            // four most significant bits holds version number 3
            (hexdec(substr($hash, 12, 4)) & 0x0fff) | 0x3000,
            // 16 bits, 8 bits for "clk_seq_hi_res",
            // 8 bits for "clk_seq_low",
            // two most significant bits holds zero and one for variant DCE1.1
            (hexdec(substr($hash, 16, 4)) & 0x3fff) | 0x8000,
            // 48 bits for "node"
            substr($hash, 20, 12)
        );
    }
public static function v3 ( $ namespace , $ name ) { if ( ! self :: is_valid ( $ namespace ) ) return false ; // Get hexadecimal components of namespace $ nhex = str_replace ( array ( '-' , '{' , '}' ) , '' , $ namespace ) ; // Binary Value $ nstr = '' ; // Convert Namespace UUID to bits for ( $ i = 0 ; $ i < strlen ( $ nhex ) ; $ i += 2 ) { $ nstr .= chr ( hexdec ( $ nhex [ $ i ] . $ nhex [ $ i + 1 ] ) ) ; } // Calculate hash value $ hash = md5 ( $ nstr . $ name ) ; return sprintf ( '%08s-%04s-%04x-%04x-%12s' , // 32 bits for "time_low" substr ( $ hash , 0 , 8 ) , // 16 bits for "time_mid" substr ( $ hash , 8 , 4 ) , // 16 bits for "time_hi_and_version", // four most significant bits holds version number 3 ( hexdec ( substr ( $ hash , 12 , 4 ) ) & 0x0fff ) | 0x3000 , // 16 bits, 8 bits for "clk_seq_hi_res", // 8 bits for "clk_seq_low", // two most significant bits holds zero and one for variant DCE1.1 ( hexdec ( substr ( $ hash , 16 , 4 ) ) & 0x3fff ) | 0x8000 , // 48 bits for "node" substr ( $ hash , 20 , 12 ) ) ; }
Generate v3 UUID

Version 3 UUIDs are named based. They require a namespace (another
valid UUID) and a value (the name). Given the same namespace and
name, the output is always the same.

@param    uuid $namespace
@param    string $name
Generate v3 UUID