com_create_guid

(PHP 5, PHP 7, PHP 8)

com_create_guid生成全局唯一标识符 (GUID)

描述

com_create_guid(): string|false

生成全局唯一标识符 (GUID)。

GUID 的生成方式与 DCE UUID 相同,只是 Microsoft 的约定是在大括号中包含 GUID。

参数

此函数没有参数。

返回值

返回 GUID 作为字符串,如果失败则返回 false

参见

  • uuid_create() 在 PECL uuid 扩展中

添加备注

用户贡献的备注 6 个备注

33
Dave Pearson (dave at pds-uk dot com)
8 年前
这是我最终版本的 GUIDv4 函数(基于这里其他人的作品),它应该在所有平台上都能正常工作,如果其他平台不支持,则优雅地回退到安全性较低的版本...

<?php
/**
* 返回 GUIDv4 字符串
*
* 使用所有支持的平台的最佳密码学安全方法
* 并回退到较旧、
* 安全性较低的版本。
*
* @param bool $trim
* @return string
*/
function GUIDv4 ($trim = true)
{
// Windows
if (function_exists('com_create_guid') === true) {
if (
$trim === true)
return
trim(com_create_guid(), '{}');
else
return
com_create_guid();
}

// OSX/Linux
if (function_exists('openssl_random_pseudo_bytes') === true) {
$data = openssl_random_pseudo_bytes(16);
$data[6] = chr(ord($data[6]) & 0x0f | 0x40); // 将版本设置为 0100
$data[8] = chr(ord($data[8]) & 0x3f | 0x80); // 将位 6-7 设置为 10
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}

// 回退 (PHP 4.2+)
mt_srand((double)microtime() * 10000);
$charid = strtolower(md5(uniqid(rand(), true)));
$hyphen = chr(45); // "-"
$lbrace = $trim ? "" : chr(123); // "{"
$rbrace = $trim ? "" : chr(125); // "}"
$guidv4 = $lbrace.
substr($charid, 0, 8).$hyphen.
substr($charid, 8, 4).$hyphen.
substr($charid, 12, 4).$hyphen.
substr($charid, 16, 4).$hyphen.
substr($charid, 20, 12).
$rbrace;
return
$guidv4;
}
?>
38
Alix Axel
13 年前
phunction PHP 框架 (http://sourceforge.net/projects/phunction/) 使用以下函数来生成有效的版本 4 UUID

<?php

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));
}

?>

sprintf() 和 mt_rand() 调用生成的输出与 com_create_guid() 的结果相同。
27
pavel.volyntsev(at)gmail
8 年前
使用更强的密码学算法来生成伪随机字节,并将其格式化为 GUID v4 字符串

function guidv4()
{
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); // 将版本设置为 0100
$data[8] = chr(ord($data[8]) & 0x3f | 0x80); // 将位 6-7 设置为 10
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
11
indrora
8 年前
如果您要生成随机 UUID,至少要使它们符合

* 第三节的最高字节必须为 4
* 第四节的最高字节可以是任何 (8 9 a b)

另请参见:UUID 的维基百科页面:https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_4_.28random.29
0
internmail (at the google mail).com
4 年前
function create_guid() { // 创建 GUID(全局唯一标识符)
$guid = '';
$namespace = rand(11111, 99999);
$uid = uniqid('', true);
$data = $namespace;
$data .= $_SERVER['REQUEST_TIME'];
$data .= $_SERVER['HTTP_USER_AGENT'];
$data .= $_SERVER['REMOTE_ADDR'];
$data .= $_SERVER['REMOTE_PORT'];
$hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
$guid = substr($hash, 0, 8) . '-' .
substr($hash, 8, 4) . '-' .
substr($hash, 12, 4) . '-' .
substr($hash, 16, 4) . '-' .
substr($hash, 20, 12);
return $guid;
}
-12
rogervila dot es
4 年前
我实现了一个 com_create_guid 的实现,用于不支持它的系统,并将其作为 Composer 包,以便将其与我的应用程序分开。

https://github.com/rogervila/com_create_guid
To Top