有的:
String uuid = javautilUUIDrandomUUID()toString();这样就随机生成一个这样的字符串
例如:c9028fda-dba3-4209-9616-1781e8f20258
可以去掉之间的“-”符号
uuid = uuidreplaceAll("-", "");
希望对你有帮助
1)1~8位采用系统时间,在系统时间上精确到毫秒级保证时间上的惟一性;
2)9~16位采用底层的IP地址,在服务器集群中的惟一性;
3)17~24位采用当前对象的HashCode值,在一个内部对象上的惟一性;
4)25~32位采用调用方法的一个随机数,在一个对象内的毫秒级的惟一性。
通过以上4种策略可以保证惟一性。在系统中需要用到随机数的地方都可以考虑采用UUID算法。
通用的GUID的结构如下
typedef struct _GUID {
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE Data4[8];
} GUID;
举一个例子:
假设一个GUID的格式是这样的 6B29FC40-CA47-1067-B31D-00DD010662DA
其中Data1 是32位,可以看做8个四位十六进制数,对应于上面的6B29FC40
其中Data2 是16位,可以看做4个四位十六进制数,对应于上面的CA47
其中Data3 是16位,可以看做4个四位十六进制数,对应于上面的1067
其中Data4 比较特殊,是8个字节也就可以看做16个四位十六进制数
取其Data4[0],Data4[1]来组成4个四位十六进制数,对应于上面的B31D
取其Data4[2],Data4[3]来组成4个四位十六进制数,对应于上面的00DD
取其Data4[4],Data4[5]来组成4个四位十六进制数,对应于上面的0106
取其Data4[6],Data4[7]来组成4个四位十六进制数,对应于上面的62DA
注意:四位十六进制数对应一个GUID字符。
在Windows下提供了一个函数可以生成一个GUID。需要使用的头文件 "objbaseh",需要链接的库ole32lib。
HRESULT CoCreateGuid(GUID pguid);
在Linux下首先需要下载到相应的库文件和头文件
如果是Debian用户可以方便的通过apt命令来获取相关资源。
apt-get install uuid-dev
安装完成后会发现
在/usr/include/ 下有一个uuid文件夹,其中则包含了uuidh头文件。
在/usr/lib/ 下有几个libuuid的链接库文件,包括静态和动态链接库。
打开uuidh你会发现有一个uuid_generate(uuid_t out) 的函数声明。我们可以通过调用这个函数来生成UUID。
uuid_generate(reinterpret_cast<unsigned char >(&guid));
生成GUID是不是很简单!是的,因为生成的算法不用我们去实现,我们是站在前人的肩膀所以我们要感谢他们。
下面给出一个WINDOWS和LINUX下通用的程序。
// uuid_testcpp
#include <string>
#include <stdioh>
#include <iostream>
#include "uuid_testhpp"
#ifdef WIN32
#include <objbaseh>
#else
#include <uuid/uuidh>
#endif
using namespace std;
namespace ChinuxTeam
{
GUID CreateGuid()
{
GUID guid;
#ifdef WIN32
CoCreateGuid(&guid);
#else
uuid_generate(reinterpret_cast<unsigned char >(&guid));
#endif
return guid;
}
std::string GuidToString(const GUID &guid)
{
char buf[64] = {0};
#ifdef __GNUC__
snprintf(
#else // MSVC
_snprintf_s(
#endif
buf,
sizeof(buf),
"{%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X}",
guidData1, guidData2, guidData3,
guidData4[0], guidData4[1],
guidData4[2], guidData4[3],
guidData4[4], guidData4[5],
guidData4[6], guidData4[7]);
return std::string(buf);
}
}
对应的头文件
// uuid_testhpp"
#include <string>
#include <stdioh>
#include <iostream>
typedef struct _GUID
{
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID, UUID;
namespace ChinuxTeam
{
GUID CreateGuid();
std::string GuidToString(const GUID &guid);
}// namespace ChinuxTeam
最后一个 GuidToString()稍微解释一下,作用就是把GUID以固定的格式输出到标准string字符串中,
根据编译器的不同调用分别调用了不同的字符串打印函数。
另外附一个简单的测试函数
#include <string>
#include <stdioh>
#include <iostream>
#ifdef WIN32
#include "objbaseh"
#else
typedef struct _GUID
{
unsigned long Data1;
unsigned short Data2;
unsigned short Data3;
unsigned char Data4[8];
} GUID, UUID;
#endif
namespace ChinuxTeam{
GUID CreateGuid();
std::string GuidToString(const GUID &guid);
}
运行后会生成一个GUID并打印到标准输出的控制台上。
以上就是关于hibernate使用uuid.hex生成一个32位的主键,java API中有生成类似32位String的方法吗全部的内容,包括:hibernate使用uuid.hex生成一个32位的主键,java API中有生成类似32位String的方法吗、js 生成UUID、如何快速生成 UUID GUID等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)