Cómo generar un GUID válido y único

Código PHP

PHP – String – Generar GUID válido

Función que genera un código GUID válido, formado por caracteres hexadecimales en bloques de 3, 4, 4, 4 y 6 caracteres separados por un guión.

/**
 * Class HelperString
 */
abstract class HelperString
{

    /**
     * Devuevle un GUID válido.
     *
     * @return string
     */
    public static function createGUID()
    {
        $microTime = microtime();
        list($a_dec, $a_sec) = explode(" ", $microTime);
        $dec_hex = dechex($a_dec * 1000000);
        $sec_hex = dechex($a_sec);

        self::guidSetLen($dec_hex, 5);
        self::guidSetLen($sec_hex, 6);
        $guid = "";
        $guid .= $dec_hex;
        $guid .= self::guidCrearSeccion(3);
        $guid .= '-';
        $guid .= self::guidCrearSeccion(4);
        $guid .= '-';
        $guid .= self::guidCrearSeccion(4);
        $guid .= '-';
        $guid .= self::guidCrearSeccion(4);
        $guid .= '-';
        $guid .= $sec_hex;
        $guid .= self::guidCrearSeccion(6);
        return $guid;
    }

    /**
     * Asignar longitud
     * @param $string
     * @param $length
     */
    private static function guidSetLen(&$string, $length)
    {
        $strlen = strlen($string);
        if ($strlen < $length) {
            $string = str_pad($string, $length, '0');
        } else {
            if ($strlen > $length) {
                $string = substr($string, 0, $length);
            }
        }
    }

    /**
     * Crear sección
     * @param $characters
     * @return string
     */
    private static function guidCrearSeccion($characters)
    {
        $return = "";
        for ($i = 0; $i < $characters; $i++) {
            $return .= dechex(mt_rand(0, 15));
        }
        return $return;
    }
}