用java生成guid(用java生成隨機六位數)

本文目錄一覽:

哪位高手能提供個產生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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-30 16:08
下一篇 2024-12-30 16:08

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論