n值UUID生成器,可重用的ID

时间:2009-10-20 07:00:09

标签: c++ qt unique

我需要一个简单的UUID生成器。 对于此单个实例,ID必须是唯一的。 另一个要求是,它具有一次共存的n个哈希值,并且是可释放的。 我不知道这是否符合UUID的概念。 我只是想到了一个使用pop和push的带有n值的Stack,但是这种做法看起来很糟糕。

使用基于随机的UUID(不包括加密的UUID)是不够节省的,因为运气不好可能有2个匹配的ID,这是不可能的(虽然可以忽略不计),因为这应该用于生产环境。

2 个答案:

答案 0 :(得分:2)

我强烈推荐this库,它是一个助推器 - 我们在其中一个项目中使用它并且它工作得很好。链接是v13。此版本+其他版本可位于www.boostpro.com

示例:

#include <string>
#include <iostream>
#include <UUID/boost/uuid/uuid.hpp>
using namespace std;

/*! returns a filename which is a uuid + .dat*/
std::string generate_filename()
{
    boost::uuids::uuid_generator gen;
    boost::uuids::uuid u = gen();
    return u.to_string()+ ".dat";
}

void main()
{
    for(int i = 0; i < 10; i++)
        cout << generate_filename() << endl;
}

如果这是您所寻求的,请将此帖标记为答案:)

答案 1 :(得分:1)

通用唯一标识符(UUID)/全球唯一标识符(GUID)

生成唯一ID的问题可以分解为空间上的唯一性和随时间变化的唯一性,当它们组合在一起时,旨在产生一个全局唯一的序列。

UUID正式且具体地定义为ISO-11578标准的一部分,其他规范也存在,如RFC 4122,ITU-T Rec。 X.667。

OSSP uuid(http://www.ossp.org/pkg/lib/uuid/)是ISO C,ISO C ++,Perl和PHP的API,以及用于生成DCE 1.1,ISO / IEC 11578:1996和RFC4122兼容的通用唯一标识符的相应CLI(的UUID)。它支持版本1的DCE 1.1变体UUID(基于时间和节点),版本3(基于名称,MD5),版本4(基于随机数)和版本5(基于名称,SHA-1)。 UUID是128位数字,旨在在空间和时间上具有很高的唯一性,并且在计算上难以猜测。它们是全局唯一标识符,可以在不联系全局注册机构的情况下在本地生成。它是根据MIT / X联盟许可证开源的。

我在http://en.wikibooks.org/wiki/The_World_of_Peer-to-Peer_%28P2P%29/Building_a_P2P_System#Unique_ID

中加入了一些进一步的解释

在Windows上检查RPC库(参见#include“Rpcdce.h”),它具有生成UUID的功能。