UUID.randomUUID()生成唯一識別碼


1、UUID 的概念
UUID(Universally Unique Identifier):通用唯一識別碼,是一種軟件建構的標准。

UUID 目的是讓分布式系統中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。

UUID是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。
 

2、UUID的組成
UUID由以下幾部分組合:

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

(2)時鍾序列。

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

UUID的唯一缺陷在於生成的結果串會比較長。

標准的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)。
————————————————
 

3、UUID.randomUUID()使用

 直接生成的ID中有“-”存在,如果不需要,可以使用replace()方法去掉。

import java.util.UUID;

public class UUIDTest {
  public static void main(String[] args) {
    String uId = UUID.randomUUID().toString();
    System.out.println(uId);
    System.out.println(uId.replace("-", ""));
  }
}

 

 

4. 我給他指點了一下可以簡單的使用 uuid 來做,但是 uuid 產生的是一個不重復的字符串。用來當做訂單編號,顯然不太合適。但是我們可以變個魔術,來讓它變成一組數字。原理其實很簡單,就是借助 java 中 String 類的 hashcode() 方法即可。整個代碼實現如下所示:

1
2
3
4
5
6
7
8
9
10
11
public  static  String createOrderId() {  
     int  machineId =  1 ; //最大支持1-9個集群機器部署  
     int  hashCodeV = UUID.randomUUID().toString().hashCode();  
     if (hashCodeV <  0 ) { //有可能是負數  
         hashCodeV = - hashCodeV;  
     }  
     // 0 代表前面補充0       
     // 4 代表長度為4       
     // d 代表參數為正數型  
     return  machineId+String.format( "%015d" , hashCodeV);  
}

通過我對多線程的測試,結果是並發在2000左右都沒有問題,可以放心的使用。

 參考: https://blog.csdn.net/pro_fan/article/details/89219385

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM