首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Java 生成 GUID 唯一識別碼的標準實作方式

     編輯:Java 程式設計入門

GUID(Globally Unique Identifier,全域唯一識別碼)是一個 128 位元的數值,通常以 32 位十六進位字串形式呈現(含連字號分隔)。其生成演算法結合了機器網卡 MAC 位址、當前時間戳記以及隨機數,理論上單機每秒產生一千萬個 GUID 也能在 3,240 年內不重複。Java 從 JDK 1.5 起在 java.util 套件提供了 UUID 類,讓開發者能輕鬆生成標準符合 RFC 4122 規範的唯一識別碼。

核心 API 介紹

java.util.UUID 類的關鍵靜態方法:

  • randomUUID():基於隨機數生成 Type 4(亂數型)UUID,最常用
  • nameUUIDFromBytes(byte[] name):基於名稱空間與名稱生成 Type 3/5(MD5/SHA-1 雜湊)UUID
  • fromString(String uuid):將標準格式字串解析為 UUID 物件

完整程式碼範例

package com.cn.str;

import java.util.UUID;

/**
 * GUID 生成工具類
 * @author Administrator
 */
public class CreateGUID {

    /**
     * 生成標準格式 GUID 字串
     * @return 36 字元長度的 UUID 字串(含 4 個連字號)
     */
    public static final String GenerateGUID() {
        UUID uuid = UUID.randomUUID();
        return uuid.toString();
    }

    public static void main(String[] args) {
        // 測試輸出範例:550e8400-e29b-41d4-a716-446655440000
        System.out.println(GenerateGUID());
    }
}

UUID 字串格式解析

標準 UUID 字串長度為 36 字元,結構如下:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
│        │    │    │    │
│        │    │    │    └─ 節點識別碼(48 位元,通常為 MAC 位址或隨機數)
│        │    │    └─ 時鐘序列(14 位元)
│        │    └─ 版本號(4 位元):4 表示隨機生成
│    └─ 時間戳記中間 16 位元
└─ 時間戳記低 32 位元

版本號(第 13 位字元)常見值:

  • 1:基於時間與 MAC 位址
  • 3:MD5 雜湊命名空間
  • 4:亂數生成(randomUUID() 使用)
  • 5:SHA-1 雜湊命名空間

常見應用場景

  1. 資料庫主鍵:分散式系統中避免主鍵衝突
  2. 交易流水號:訂單號、支付單號等業務唯一標識
  3. Session 識別:Web 應用中的會話追蹤
  4. 檔案命名:上傳檔案重命名避免衝突
  5. 快取鍵值:分散式快取系統的 Key 生成

效能與替代方案

UUID.randomUUID() 內部使用 SecureRandom,高併發下可能成為瓶頸。若對效能極度敏感,可考慮:

  • Snowflake 演算法:Twitter 開源的 64 位元長整數 ID,含時間戳、機器 ID、序列號
  • NanoID:更短的 URL 友善隨機字串
  • 自定義序列號:單機或有協調中心時使用資料庫序列或 Redis INCR

總結

Java 內建的 UUID.randomUUID() 是生成 GUID 最簡單、標準且足夠絕大多數場景的方案。理解其格式結構與版本差異,有助於在特定業務場景(如需排序、需可逆解析)選擇更合適的 ID 生成策略。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved