关于php:如何生成新的GUID?

How to generate a new GUID?

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

我不熟悉C#GUID() object,但需要类似于PHP的东西(因此创建一个新的对象,根据我的理解返回empty/blank GUID)。

有什么主意吗?


您可以尝试以下操作:

1
2
3
4
5
6
7
8
9
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));
}

资料来源:com_create_guid


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

1
$guid = bin2hex(openssl_random_pseudo_bytes(16));

它给出一个类似于412ab7489d8b332b17a2ae127058f4eb的字符串。


1
2
3
4
5
6
7
8
9
10
11
<?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));
}
?>

GUID发生器


根据guid和uuid之间的区别?

GUID is Microsoft's implementation of the UUID standard.

因此,这里有一个到库的链接,让您创建以下类型的UUID:

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

https://github.com/search?p=1&q=uuid+php&ref=CmdForm&type=存储库

我不太清楚,哪一个C正在使用,但如果你在写一些软件,并且想要有通用的唯一标识符,那至少是你可以使用的。

我的最佳选择是https://github.com/fredriklindberg/class.uuid.php,因为它只是一个简单的php文件,最受欢迎的文件(https://github.com/ramsey/uuid)对其他库有很大的依赖性,但它可能很快就会改变(参见https://github.com/ramsey/uuid/issues/20)。

但是如果你真的需要一个guid(根据微软的标准),他们有一个不同于4122的生成过程。维基百科声称

GUIDs and RFC 4122 UUIDs should be identical when displayed textually

http://en.wikipedia.org/wiki/globally_unique_identifier binary_编码

在大多数情况下,您应该选择一个用于UUID的php libs。我不认为你在干预微软组件对象模型(COM),是吗?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
    }
}

来源:http://guid.us/guid/php