UUID生成方法总结

日期: 03 月 20日, 2014
标签:

UUID 简介,摘自维基百科

通用唯一识别码(英语:Universally Unique Identifier,简称UUID)是一种软件建构的标准,亦为自由软件基金会组织在分散式计算环境领域的一部份。

UUID 的目的,是让分散式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。在这样的情况下,就不需考虑数据库创建时的名称重复问题。目前最广泛应用的 UUID,是微软公司的全局唯一标识符(GUID),而其他重要的应用,则有 Linux ext2/ext3文件系统、LUKS 加密分区、GNOME、KDE、Mac OS X 等等。另外我们也可以在 e2fsprogs 包中的 UUID 库找到实现。

生成方法

搜集了一些 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,示例如下:

#include <stdio.h>
#include <uuid/uuid.h>

int main(int argc, char **argv)
{
	uuid_t uuid;
	char str[36];

	uuid_generate(uuid);
	uuid_unparse(uuid, str);

	printf("%s\n", str);

	return 0;
}

在 Linux 下编译时需要链接 uuid 库

gcc -o uuid uuid.c -luuid

boost uuid

Boost 是一个可移植的开源 C++ 库,它提供了 UUID 的实现。

下面的代码可以生成一个 UUID

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_generators.hpp>

boost::uuids::uuid a_uuid = boost::uuids::random_generator();

Qt QUuid

Qt 是一个跨平台的 C++ 编程框架,QUuid 类实现了 UUID 的生成、比较、转换等功能。

函数 QUuid createUuid() 可用于生成一个随机 UUID。示例如下:

#include <iostream>
#include <QUuid>
#include <QString>

int main()
{
	QUuid uuid = QUuid::createUuid();
	std::cout << qPrintable(uuid.toString()) << std::endl;
	return 0;
}

CoCreateGuid

Windows 下提供了函数 CoCreateGuid 用于生成 GUID。需要使用的头文件是 “objbase.h”,需要链接的库是 ole32.lib,函数原型为:

HRESULT CoCreateGuid(GUID *pguid);

GUID 的原型为

typedef struct _GUID
{
	DWORD Data1;
	WORD Data2;
	WORD Data3;
	BYTE Data4[8];
} GUID;

Java

JDK 1.5 以上支持 UUID,用法如下:

import java.util.UUID;
String uuid = UUID.randomUUID().toString();