一、UUID概述
UUID含義是通用唯一識別碼 (Universally Unique Identifier),這是一個軟件建構的標准,也是被開源軟件基金會 (Open Software Foundation, OSF) 的組織在分布式計算環境 (Distributed Computing Environment, DCE) 領域的一部份。
UUID 的目的,是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人沖突的 UUID。在這樣的情況下,就不需考慮數據庫建立時的名稱重復問題。
目前最廣泛應用的 UUID,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應用,則有 Linux ext2/ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。
UUID的唯一缺陷在於生成的結果串會比較長。
二、UUID 組成
UUID保證對在同一時空中的所有機器都是唯一的。通常平台會提供生成的API。按照開放軟件基金會(OSF)制定的標准計算,用到了以太網卡地址、納秒級時間、芯片ID碼和許多可能的數字。
UUID組成部分:
(1)當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之后,過幾秒又生成一個UUID,則第一個部分不同,其余相同。
(2)時鍾序列。
(3)全局唯一的IEEE機器識別號,如果有網卡,從網卡MAC地址獲得,沒有網卡以其他方式獲得。
在ColdFusion中可以用CreateUUID()函數很簡單地生成UUID,
其格式為:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每個 x 是 0-9 或 a-f 范圍內的一個十六進制的數字。
而標准的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12);
三、java使用UUID
java.util.UUID 類表示一個不變的通用唯一標識符(UUID)。以下是有關UUID的要點:
-
一個UUID表示一個128位的值。
-
它是用於創建隨機文件名,在Web應用程序的會話ID,事務ID等。
-
還有UUID四種不同的基本類型:基於時間,DCE安全性,基於名稱,並隨機生成的UUID。
以下是java.util.UUID類的聲明:
public final class UUID extends Object implements Serializable, Comparable<UUID>
UUID的使用:
//生成的id 752d231c-e5a3-871c-65d4-142dfa562cb4中間含有橫杠,用來生成數據庫的主鍵id是很實用的。 UUID uuid = UUID.randomUUID(); String id=uuid.toString(); id=id.replace("-", "");//替換掉中間的那個橫杠
方法摘要 | |
---|---|
int |
clockSequence() 與此 UUID 相關聯的時鍾序列值。 |
int |
compareTo(UUID val) 將此 UUID 與指定的 UUID 比較。 |
boolean |
equals(Object obj) 將此對象與指定對象比較。 |
static UUID |
fromString(String name) 根據 toString() 方法中描述的字符串標准表示形式創建 UUID。 |
long |
getLeastSignificantBits() 返回此 UUID 的 128 位值中的最低有效 64 位。 |
long |
getMostSignificantBits() 返回此 UUID 的 128 位值中的最高有效 64 位。 |
int |
hashCode() 返回此 UUID 的哈希碼。 |
static UUID |
nameUUIDFromBytes(byte[] name) 根據指定的字節數組獲取類型 3(基於名稱的)UUID 的靜態工廠。 |
long |
node() 與此 UUID 相關的節點值。 |
static UUID |
randomUUID() 獲取類型 4(偽隨機生成的)UUID 的靜態工廠。 |
long |
timestamp() 與此 UUID 相關聯的時間戳值。 |
String |
toString() 返回表示此 UUID 的 String 對象。 |
int |
variant() 與此 UUID 相關聯的變體號。 |
int |
version() 與此 UUID 相關聯的版本號。 |