How to generate a new GUID?
我正在开发一个Web服务,它需要一个新的
我不熟悉
有什么主意吗?
您可以尝试以下操作:
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)); } |
资料来源:
作为上述选项的替代方案:
1 |
它给出一个类似于
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