轉載自:http://www.360doc.com/content/14/0109/12/9297708_343818753.shtml
UUID生成方法總結
轉自:http://puxx.blog.ustc.edu.cn/index.php/2013/06/28/uuid%E7%94%9F%E6%88%90%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/
UID簡介
摘自維基百科
通用唯一識别碼(英語: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到标準輸出
- 讀取檔案
即得UUID,例如:/proc/sys/kernel/random/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
在Ubuntu中,可以用下面的指令安裝libuuid:
sudo apt-get install uuid-dev
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();