通用唯一识别码(英语:Universally Unique Identifier,简称 UUID)的标准型式包含 32 个 16 进制数字,以连字号分为五段,形式为 8-4-4-4-12 的 32 个字符。示例:
550e8400-e29b-41d4-a716-446655440000
接下来重点描述在开发中的使用及应用。
在 C++ 中的使用
C++ 原生(C++03、C++11/0x)并不支持 UUID。所以要想在 C++ 代码中生成 UUID,如果要求跨平台推荐使用第三方库 Boost UUID,要么结合各自的平台,使用系统 API。以下方法整理自互联网,除 Boost Uuid 和 libuuid 使用过之外,其他的未亲自试验。
UUID generation using Boost in C++
在 StackOverflow 上的一个例子:跳转链接
1 |
|
如果以上例子满足不了你的需求,需要在更复杂的情景下使用,请移步 Boost Uuid 官方文档。
Qt QUuid
Qt 是一个跨平台的 C++ 编程框架,QUuid
类实现了 UUID 的生成、比较、转换等功能。
函数 QUuid createUuid()
,可用于生成 UUID。示例如下:
1 |
|
Linux 下生成 UUID
Shell
Unix/Linux 环境中大都有一个名为 uuidgen 的小工具,运行即可生成一个 UUID 到标准输出。读取文件 /proc/sys/kernel/random/uuid
即得UUID,例如:
cat /proc/sys/kernel/random/uuid
libuuid
libuuid 是一个用于生成 UUID 的 C 库,具体用法参考 http://linux.die.net/man/3/libuuid,示例如下:
1 |
|
在 Linux 下编译时需要链接 uuid 库
gcc -o uuid uuid.c -luuid
问题: 在什么系统下自带?在什么系统中需要另行安装?
在 Ubuntu 中,可以用下面的命令安装 libuuid:
sudo apt-get install uuid-dev
Windows 下生成 UUID
CoCreateGuid
Windows 下提供了函数 CoCreateGuid
用于生成 GUID。需要使用的头文件是 #include <objbase.h>
,需要链接的库是 ole32.lib
,函数原型为:HRESULT CoCreateGuid(GUID *pguid);
,GUID 的原型为
1 | typedef struct _GUID |
UuidCreate
1 |
|
在 Java 中使用
工作中偶尔会写一些 Java 的项目,所以也捎带整理一下。
在 MySQL 中
MySQL 本身是带有生成 uuid 功能的。也就是我们惯用的整数递增作为主键,其实是可以用 uuid 替代的。可以在一条记录插入之前写触发器,调用 UUID()
函数生成 uuid。