GUID全局唯一标识符

知识点:
全局唯一标识符Globally Unique Identifier简称GUID, 也称作UUID(Universally Unique IDentifier) ,主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。

GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,以5个组显示,由连字符分隔,格式为8-4-4-4-12(“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”),共36个字符(32个字母数字字符和4个连字符),其中每个 x 是 0-9 或 a-f 范围内的一个32位十六进制数。

在理想情况下,任何计算机和计算机集群都不会生成两个相同的GUID。GUID 的总数达到了2^128(3.4×10^38)个,虽然随机生成相同的GUID的概率不为零,但它足够接近零而可以忽略不计。为保证不生成重复的GUID,一般用于生成GUID的算法通常都加入了非随机的参数,以保证这种重复的情况不会发生。

GUID版本1是根据时间和节点ID(通常是MAC地址)生成;版本2 由标识符(通常是组或用户ID)、时间和节点ID生成;版本3和版本5是通过对名称空间标识符和名称进行哈希处理而生成的,其中版本3使用MD5作为哈希算法,版本5使用SHA-1作为哈希算法;版本4使用随机或伪随机数生成。

GUID 的长度固定,并且相对较短小,适合于排序、标识和存储,广泛用于注册表、类及接口标识、数据库、自动生成的机器名、目录名等,并且完全由算法自动生成,不需要一个权威机构来管理。

PHP生成GUID代码:

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

// 字母小写,去除分割符“-”,长度为32位
function uuid() {
  if (function_exists('com_create_guid') === true) {
    return strtolower(str_replace('-', '', 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));
}

一月 12, 2020 | In: PHP技术

Comment Form

You must be logged in to post a comment.

分类

归档

ipv6 ready