在 WordPress 中使用 UUID

2023-04-24 11:48:04 浏览数 (3)

今天简单介绍一下 UUID 和在 WordPress 中的使用:

什么是 UUID

UUID,是Universally Unique Identifier的缩写,UUID出现的目的,是为了让分布式系统可以不借助中心节点,就可以生成UUID来标识一些唯一的信息;

UUID来自于IETF发布的一个规范:A Universally Unique IDentifier (UUID) URN Namespace。

1个UUID是1个16字节(128位)的数字,为了方便阅读,通常将UUID表示成如下的格式:

代码语言:javascript复制
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

使用连字符将其分为五段,形成8-4-4-4-12这样的32个字符,其中的字母是16进制数字,大小写无关,一个具体的UUID:

代码语言:javascript复制
123e4567-e89b-12d3-a456-426655440000

特别注意下,N那个位置,只会是8,9,a,b。M那个位置,代表版本号,由于UUID的标准实现有5个版本,所以只会是1,2,3,4,5

UUID的不同版本

UUID本身也经过了多个版本的演化,每个版本的算法都不同。

版本1:基于时间

通过当前时间戳和机器MAC地址生成,由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,因为它暴露了电脑的MAC地址(最后的12个字符)和生成的时间,这就是这个版本被诟病的地方。

版本2:DCE安全

DCE安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。不过,在UUID的规范里面没有明确地指定,所以基本上所有的UUID实现都不会实现这个版本。

版本3:基于命名空间(MD5)

由用户指定1个命名空间和1个具体的字符串,通过MD5散列来生成,这个版本也很少用到。

版本4:基于随机数

根据随机数,或者伪随机数生成UUID,这种UUID产生重复的概率是可以计算出来的,这个版本应该是用得最多的版本了;

版本5:基于命名空间(SHA1)

和版本3一样,不过散列函数换成了SHA1

在 WordPress 中使用

WordPress 在 4.9 版本的时候引入了一个判断 UUID 的函数 wp_is_uuid,他有两个参数,uuid 和 version,他可以判断 uuid 是不是一个有效的 UUID, version 可以指定版本,目前只支持版本 4。

代码语言:javascript复制
wp_is_uuid('123e4567-e89b-12d3-a456-426655440000'); // 返回 true
wp_is_uuid('123e4567-e89b-12d3-a456-426655440000', 4); // 返回 false

因为 WordPress 中没有创建 UUID 的函数,所以我在 WPJAM Basic 中实现了创建 UUID 的函数:

代码语言:javascript复制
function wpjam_create_uuid(){
	$chars	= md5(uniqid(mt_rand(), true));
	
	return substr($chars, 0, 8).'-'
	.substr($chars, 8, 4).'-'
	.substr($chars, 12, 4).'-'
	.substr($chars, 16, 4).'-'
	.substr($chars, 20, 12);
}

下面是使用该函数创建的 10 个 uuid:

代码语言:javascript复制
cfd6f02f-fc15-42eb-52e4-1c7476c5ca7e
1140a68c-66de-6eff-e575-efac7235edc1
0886c1bd-34d4-19ea-aae4-8e871a6d39ad
8aff65a2-bfdd-b762-aec4-698eef3ab095
00cb4d8c-bb48-53e5-561e-e26d006a60e6
0d9cdc41-78af-3231-948a-cf29d8338ae2
74a4eea8-d683-ba7e-023b-73cae2f10bb9
1d40473b-ac15-e9a2-bc7f-a43fd3de3fd8
5129750a-0b23-7789-9a4f-c4704f90bb03
39edd5ee-9a5d-6729-df42-b3c522ae96e1

0 人点赞