本文目錄一覽:
- 1、哪位高手能提供個產生GUID的JAVA類
- 2、java中生成的guid是多少位
- 3、如何快速生成 UUID GUID
- 4、java uuid 和guid 的區別
- 5、java裡面怎麼樣使用GUID?
- 6、怎樣用java生成GUID與UUID
哪位高手能提供個產生GUID的JAVA類
GUID是一個128位長的數字,一般用16進位表示。演算法的核心思想是結合機器的網卡、當地時間、一個隨即數來生成GUID。從理論上講,如果一台機器每秒產生10000000個GUID,則可以保證(概率意義上)3240年不重複。
java中生成的guid是多少位
一個生成GUID的函數: private string getGUID() { System.Guid guid = new Guid(); guid = Guid.NewGuid(); string str = guid.ToString(); return str; } 隨機生成如下字元串: e92b8e30-a6e5-41f6-a6b9-188230a23dd2 格式說明: System.Guid.NewGuid().ToString(format) 格式說明符 返回值的格式 N 32位: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 如:e92b8e30a6e541f6a6b9188230a23dd2 D 由連字元分隔的32位數字: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx 如:e92b8e30-a6e5-41f6-a6b9-188230a23dd2 B 括在大括弧中、由連字元分隔的32位數字: {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} 如:{e92b8e30-a6e5-41f6-a6b9-188230a23dd2} P 括在圓括弧中、由連字元分隔的32位數字: (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) 如:(e92b8e30-a6e5-41f6-a6b9-188230a23dd2)
如何快速生成 UUID GUID
通用的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。需要使用的頭文件 “objbase.h”,需要鏈接的庫ole32.lib。
HRESULT CoCreateGuid(GUID * pguid);
在Linux下首先需要下載到相應的庫文件和頭文件
如果是Debian用戶可以方便的通過apt命令來獲取相關資源。
apt-get install uuid-dev
安裝完成後會發現
在/usr/include/ 下有一個uuid文件夾,其中則包含了uuid.h頭文件。
在/usr/lib/ 下有幾個libuuid*的鏈接庫文件,包括靜態和動態鏈接庫。
打開uuid.h你會發現有一個uuid_generate(uuid_t out) 的函數聲明。我們可以通過調用這個函數來生成UUID。
uuid_generate(reinterpret_castunsigned char *(guid));
生成GUID是不是很簡單!是的,因為生成的演算法不用我們去實現,我們是站在前人的肩膀所以我們要感謝他們。
下面給出一個WINDOWS和LINUX下通用的程序。
// uuid_test.cpp
#include string
#include stdio.h
#include iostream
#include “uuid_test.hpp”
#ifdef WIN32
#include objbase.h
#else
#include uuid/uuid.h
#endif
using namespace std;
namespace ChinuxTeam
{
GUID CreateGuid()
{
GUID guid;
#ifdef WIN32
CoCreateGuid(guid);
#else
uuid_generate(reinterpret_castunsigned 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}”,
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::string(buf);
}
}
對應的頭文件
// uuid_test.hpp”
#include string
#include stdio.h
#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 stdio.h
#include iostream
#ifdef WIN32
#include “objbase.h”
#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並列印到標準輸出的控制台上。
java uuid 和guid 的區別
UUID是一個由4個連字號(-)將32個位元組長的字元串分隔後生成的字元串,總共36個位元組長。比如:550e8400-e29b-41d4-a716-446655440000
GUID 是微軟對UUID這個標準的實現。UUID是由開放軟體基金會(OSF)定義的。UUID還有其它各種實現,不止GUID一種。比如我們這裡在Java中用到的。
java裡面怎麼樣使用GUID?
使用類 java.util.UUID,要求jdk1.5,示例如下:
//生成一個隨機的GUID
java.util.UUID uuid=java.util.UUID.randomUUID();
//將UUID對象轉換為字元串
String output=uuid.toString();
怎樣用java生成GUID與UUID
GUID 是微軟用於COM組件的標識,UUID是Java生成32位16進位ID的實現,但兩者本質相同。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/301293.html