如何生成新的GUID?

mau*_*lla 32 php guid

我正在开发一个Web服务,它需要一个新的GUID()传递作为服务中方法的引用.

我不熟悉C#或者GUID() object,但需要类似的东西PHP(所以创建一个新的对象,从我的理解返回empty/blank GUID).

有任何想法吗?

Mic*_*res 39

您可以尝试以下方法:

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));
}
Run Code Online (Sandbox Code Playgroud)

资源 - com_create_guid

  • @MuhammadNaderi为什么?`function_exists`检查具体是这样的,如果`com_create_guid`可用(即在Windows上)代码使用它,否则它会回到非Windows系统下面的`sprintf`,这应该仍然可以正常工作. (4认同)
  • 仅适用于基于Windows的平台! (2认同)
  • 据我所知,mt_rand()不能保证唯一的值,因此在非基于Windows的系统上,这可能会生成GUID格式的字符串,但不能保证它是全局唯一的。 (2认同)

Ale*_*xey 13

作为上述选项的替代方案:

$guid = bin2hex(openssl_random_pseudo_bytes(16));
Run Code Online (Sandbox Code Playgroud)

它给出了一个字符串 412ab7489d8b332b17a2ae127058f4eb

  • 对于PHP7 +,`bin2hex(random_bytes(16))` (8认同)
  • GUID 不应该是完全随机的,它们具有特定的结构。不要使用此答案,而是使用其他答案之一来生成正确的 GUID。 (2认同)

Sim*_*ity 6

根据GUID 和 UUID 之间有什么区别吗?

GUID 是 Microsoft 对 UUID 标准的实现。

所以,这里有一个库的链接,让你创建以下类型的 UUID:

  • 版本 1(基于时间)
  • 版本 3(基于名称并使用 MD5 散列)
  • 版本 4(随机)
  • 版本 5(基于名称并使用 SHA1 散列)

https://github.com/search?p=1&q=uuid+php&ref=cmdform&type=Repositories

我不确切知道 C# 正在使用哪一个,但如果您正在编写某些软件并希望拥有通用唯一标识符,那么至少可以使用它。

我更喜欢的选择是https://github.com/fredriklindberg/class.uuid.php,因为它只是一个简单的 PHP 文件,而且评分最高的文件 ( https://github.com/ramsey/uuid ) 对其他图书馆,但他的可能很快就会改变(见https://github.com/ramsey/uuid/issues/20)。

但是如果你真的需要一个 GUID(根据微软标准),它们的生成过程与这些 4122 不同。维基百科声称

当以文本方式显示时,GUID 和 RFC 4122 UUID 应该相同

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

在大多数情况下,使用 UUID 的 PHP 库之一应该没问题。我不认为您在干预Microsoft 组件对象模型 (COM),不是吗?


小智 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));
}
?>
Run Code Online (Sandbox Code Playgroud)

GUID生成器


Muh*_*eri 5

对于像我这样的谷歌用户,我发现这个片段更准确:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

来源http://guid.us/GUID/PHP

  • 不独特!使用这个:`$charid = strtoupper(bin2hex(openssl_random_pseudo_bytes(16)));` (2认同)
  • return vsprintf('%s%s-%s-%s-%s-%s%s%s',str_split($charid,4)); (2认同)