Estoy trabajando en un servicio web, que requiere una nueva GUID() pasa como una referencia a un método en el servicio.

Yo no estoy familiarizado con C# o la GUID() object, pero requieren algo similar para PHP (para crear un nuevo objeto que a mi entender devuelve un empty/blank GUID).

Alguna idea?

  • php.net/manual/en/function.uniqid.php
  • (Nota: Guid.NewGuid en .NET genera un UUIDv4.)
  • Generalmente mejor para el enlace de los no localizados ref.
  • Aaaah mierda … acabo de google y copiar el enlace, pero yo obtener de forma automática los alemanes página, sry.
  • verificar stackoverflow.com/questions/2040240/…
  • Desde mi comprensión nuevo guid() en C# sería devolver un objeto que devuelve un espacio en blanco (00000000-0000-0000-000000000000) GUID desde el constructor. Como yo nunca he visto la clase de C#/objeto no sé cuáles son los procedimientos para «replicar» un similar de clase que tienen las mismas propiedades y métodos que por lo que puedo ver, el servicio web requiere. Por lo tanto tengo más necesidad de conseguir un PHP equivalente de la C# nuevo guid() método como aponer a conocer a crear. La esperanza tiene sentido?
  • No reinventar la rueda, solo usa github.com/ramsey/uuid.

InformationsquelleAutor mauzilla | 2014-02-10

6 Comentarios

  1. 40

    Usted puede tratar el siguiente:

    function GUID()
    {
        if (function_exists('com_create_guid') === true)
        {
            return trim(com_create_guid(), '{}');
        }
    
        return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X', mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535));
    }

    Fuente – com_create_guid

    • Sólo funciona en windows basados en plataformas!
    • Por qué? El function_exists de verificación no es específicamente de manera que si com_create_guid está disponible (es decir, en Windows) el código que se utiliza, pero de lo contrario, se cae de nuevo a la sprintf de abajo de la no-los sistemas Windows, que debería funcionar bien.
    • Hasta donde yo sé, mt_rand() no promete un valor único, por lo que no los sistemas basados en windows, esto podría generar un GUID cadena con formato, pero no se comprometió a ser Globalmente Únicos.
    • Mientras esto implementa el mismo algoritmo subyacente de que el come_create_guid() función de los usos, es suficiente. Y que mejor que usar mt_srand() de rand(). Pero una llamada a mt_srand() puede ayudar.
  2. 13

    Como una alternativa a las opciones anteriores:

    $guid = bin2hex(openssl_random_pseudo_bytes(16));

    Se da una cadena como 412ab7489d8b332b17a2ae127058f4eb

    • bin2hex(random_bytes(16)) para PHP7+
    • Guid no se supone que para ser totalmente al azar, tienen una estructura específica. No use esta respuesta, utilice uno de las otras respuestas vez que generar correcta Guid.
  3. 6
    <?php
    function guid(){
    if (function_exists('com_create_guid') === true)
        return trim(com_create_guid(), '{}');
    
    $data = openssl_random_pseudo_bytes(16);
    $data[6] = chr(ord($data[6]) & 0x0f | 0x40);
    $data[8] = chr(ord($data[8]) & 0x3f | 0x80);
    return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
    }
    ?>

    Generador GUID

  4. 4

    Según Hay alguna diferencia entre un GUID y un UUID?

    GUID es la implementación de Microsoft del UUID estándar.

    Por lo tanto, aquí hay un enlace a las bibliotecas, que vamos a crear los Uuid de los siguientes tipos:

    • versión 1 (basado en el tiempo)
    • versión 3 (basado en el nombre y aplica el algoritmo hash MD5)
    • versión 4 (al azar)
    • la versión 5 (basado en el nombre y aplica el algoritmo hash SHA1)

    https://github.com/search?p=1&p=uuid+php&ref=cmdform&tipo=Repositorios

    No sé exactamente, que C# es el uso, pero al menos es algo que usted puede utilizar si usted está escribiendo alguna pieza de software, y quiere tener universal identificadores únicos.

    Mi perfered elección fue https://github.com/fredriklindberg/class.uuid.php porque se trata de un simple archivo PHP y el más valorado de un (https://github.com/ramsey/uuid) había mucho dependencias en otras bibliotecas, pero su puede cambiar pronto (ver https://github.com/ramsey/uuid/issues/20).

    Pero si usted realmente necesita un GUID (según el estándar de Microsoft), tienen un diferente proceso de generación de estos 4122. Wikipedia afirma que

    Guid y RFC 4122 Uuid deben ser idénticos cuando aparece textualmente

    http://en.wikipedia.org/wiki/Globally_Unique_Identifier#Binary_encoding

    En la mayoría de los casos, usted debería estar bien al ir en busca de uno de los PHP libs para Uuid. Yo no creo que seas metiche con Microsoft Modelo de Objetos Componentes (COM), ¿no?

    • Hola Simon, gracias por tu respuesta. Puedo confirmar que el jabón llamada al método requiere una referencia a un nuevo Guid() de ASP. El servicio, a continuación, compruebe las credenciales y, a continuación, crear un nuevo GUID (creo que se llama al método new_guid() dentro de la Guid() del objeto que es capturado en ambos extremos. Con esto, dijo, no estoy seguro de cómo abordar este como (y puedo estar equivocado), incluso si puedo volver a crear el Guid() del objeto, y enviarlo junto como una referencia (posiblemente a través de la tostring) su servicio no sería capaz de trabajar con el objeto PHP (que utilizan sharepoint). Alguna idea?
    • Por favor, explique por qué esto se votó.. quiero hacerlo mejor la próxima vez!
  5. 3

    Para los empleados como a mi mismo,
    He encontrado este snipet más precisa:

    function getGUID(){
        if (function_exists('com_create_guid')){
            return com_create_guid();
        }else{
            mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
            $charid = strtoupper(md5(uniqid(rand(), true)));
            $hyphen = chr(45);//"-"
            $uuid = chr(123)//"{"
                .substr($charid, 0, 8).$hyphen
                .substr($charid, 8, 4).$hyphen
                .substr($charid,12, 4).$hyphen
                .substr($charid,16, 4).$hyphen
                .substr($charid,20,12)
                .chr(125);//"}"
            return $uuid;
        }
    }

    fuente http://guid.us/GUID/PHP

    • No es el único! El uso de este lugar: $charid = strtoupper(bin2hex(openssl_random_pseudo_bytes(16)));
    • volver vsprintf(‘%s%s-%s-%s-%s-%s%s%s’,str_split($charid,4));
  6. 1

    Si usted sólo necesita una única ID:

    $uid = dechex( microtime(true) * 1000 ) . bin2hex( random_bytes(8) );

    Si ID generado más de 1 milisegundo además, son 100% único.

    Si dos id’s se generan a intervalos más cortos, esto generaría ID que se 99.999999999999999999% de probabilidades de ser único global (colisión en 1 de 10^18)

    Puede aumentar este número, mediante la adición de más dígitos, pero a generar el 100% del IDENTIFICADOR único que se necesita para usar un contador global.

    si usted realmente necesita el cumplimiento del RFC, esto va a pasar como válida la versión 4 GUID:

    $guid = vsprintf('%s%s-%s-4000-8%.3s-%s%s%s0',str_split(dechex( microtime(true) * 1000 ) . bin2hex( random_bytes(8) ),4));

    Esto sigue a la intención, pero no la letra de la RFC. Entre otras discrepancias se trata de un par de dígitos al azar corto. (Añadir más dígitos al azar, si lo necesitas, La ventaja es que esto es rápido, en comparación con el 100% compatibles con el código. Usted puede prueba de su GUID aquí

Dejar respuesta

Please enter your comment!
Please enter your name here