1 Windows/Linux生成uuid
1.1 uuid
UUID含义是通用唯一识别码(Universally Unique Identifier),这是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。
UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字
UUID由以下几部分的组合:
- 当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
- 时钟序列
- 全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得
UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。
1.2 Windows/Linux生成uuid工具类
本文封装一个在Windows和Linux上生成uuid的工具类UUIDUtils类,该类在Windows上使用CoCreateGuid生成GUID,在Linux上依赖uuid库。
所以在linux上编译需要先安装uuid库,
Ubuntu:
sudo apt-get install uuid-dev
Centos:
yum install uuid uuid-devel
# 或
yum install libuuid libuuid-devel
并使用-luuid
链接uuid库
,不然会在编译时出现
fatal error: uuid/uuid.h: No such file or directory
错误。
UUIDUtils的源码如下:
UUIDUtils.h
#ifndef _UUID_UTILS_H
#define _UUID_UTILS_H
#include <string>
class UUIDUtils
{
public:
static std::string GenerateUUID();
};
#endif // !_UUID_UTILS_H
UUIDUtils.cpp
#include "UUIDUtils.h"
#include <stdio.h>
#include <stdint.h>
#include <string>
#if defined(_WIN32)
#include <objbase.h>
#elif defined(__linux__)
#include <uuid/uuid.h>
#else
#error "uuid unsupport platform"
#endif
#define GUID_LEN 64
std::string UUIDUtils::GenerateUUID()
{
#ifdef _WIN32
char buf[GUID_LEN] = { 0 };
GUID guid;
if (CoCreateGuid(&guid))
{
return std::move(std::string(""));
}
sprintf(buf,
"%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X",
guid.Data1, guid.Data2, guid.Data3,
guid.Data4[0], guid.Data4[1], guid.Data4[2],
guid.Data4[3], guid.Data4[4], guid.Data4[5],
guid.Data4[6], guid.Data4[7]);
return std::move(std::string(buf));
#elif __linux__
char buf[GUID_LEN] = { 0 };
uuid_t uu;
uuid_generate(uu);
int32_t index = 0;
for (int32_t i = 0; i < 16; i++)
{
int32_t len = i < 15 ?
sprintf(buf + index, "%02X-", uu[i]) :
sprintf(buf + index, "%02X", uu[i]);
if (len < 0)
return std::move(std::string(""));
index += len;
}
return std::move(std::string(buf));
#endif // WIN32
}
参考链接
本文作者:StubbornHuang
版权声明:本文为站长原创文章,如果转载请注明原文链接!
原文标题:C++ – Windows/Linux生成uuid(通用唯一识别码)
原文链接:https://www.stubbornhuang.com/2112/
发布于:2022年04月28日 15:43:32
修改于:2023年06月26日 20:13:32
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
评论
52