歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java UUID 生成唯一標識

Java UUID 生成唯一標識

日期:2017/3/1 9:31:12   编辑:Linux編程

需求

項目在設計表的時候,要處理並發多的一些數據,類似訂單號不能重復,要保持唯一。原本以為來個時間戳,精確到毫秒應該不錯了。後來覺得是錯了,測試環境下很多一樣的ID,不能達到唯一標識。

UUID

JDK API 是這麼說的:“表示通用唯一標識符 (UUID) 的類。 UUID 表示一個 128 位的值。”

詳細的說就是

“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由以下幾部分的組合:   

(1)當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其余相同。   

(2)時鐘序列   

(3)全局唯一的IEEE機器識別號,如果有網卡,從網卡MAC地址獲得,沒有網卡以其他方式獲得。

代碼實現

很方便的,直接調用UUID的randomUUID方法,即可獲得UUID對象,然後就獲取了這個唯一標識碼。

public static void main(String[] args)
{
UUID uuid = UUID.randomUUID();
System.out.println(uuid);
}

RUN一下,可以從控制台發現:

65752c66-bd3f-4564-b8d6-92d66796e007

這就是唯一標志碼。但顯得冗長,不夠友好。如果在URL後面做參數,更加不夠友好。還有存儲一個UUID要花費更多的空間。獲取的時間倒不必考慮太多。

獲取八位UUID標識碼

仿著網上大牛代碼,直接上代碼:

public static String[] chars = new String[]
{
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V","W", "X", "Y", "Z"
};


public static String getShortUuid()
{
StringBuffer stringBuffer = new StringBuffer();
String uuid = UUID.randomUUID().toString().replace("-", "");
for (int i = 0; i < 8; i++)
{
String str = uuid.substring(i * 4, i * 4 + 4);
int strInteger = Integer.parseInt(str, 16);
stringBuffer.append(chars[strInteger % 0x3E]);
}

return stringBuffer.toString();
}

用300個測試下,沒問題。足夠用了,能適應環境場景即可。

Java中的UUID http://www.linuxidc.com/Linux/2015-02/113529.htm

Copyright © Linux教程網 All Rights Reserved