導航:首頁 > 編程語言 > java唯一編號

java唯一編號

發布時間:2022-05-21 20:31:53

java生成唯一標識符有什麼用

有時我們不依賴於資料庫中自動遞增的欄位產生唯一ID,比如多表同一欄位需要統一一個唯一ID,這時就需要用程序來生成一個唯一的全局ID,然後在資料庫事務中同時插入到多章表中實現同步.
在java中有個類工具很好的實現產生唯一ID(UUID),但是由數字和字母及中劃線組成的,故資料庫欄位應該設置為char 並相應的建立索引.
UUID是128位整數(16位元組)的全局唯一標識符(Universally Unique Identifier).
指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的.通常平台會提供生成UUID的API.UUID按照開放軟體基金會(OSF)制定的標准計算,用到了乙太網卡地址,納秒級時間,晶元ID碼和許多可能的數字.由以下幾部分的組合:當前日期和時間(UUID的第一個部分與時間有關,如果你在生成一個 UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同),時鍾序列,全局唯一的IEEE機器識別號(如果有網卡,從網卡獲得,沒有網卡以其他方式獲得),UUID的唯一缺陷在於生成的結果串會比較長.關於UUID這個標准使用最普遍的是微軟的GUID(Globals Unique Identifiers).
在ColdFusion中可以用CreateUUID()函數很簡單的生成UUID,其格式為:xxxxxxxx- xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每個 x 是 0-9 或 a-f 范圍內的一個十六進制的數字.而標準的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)
,可以從cflib 下載CreateGUID() UDF進行轉換.
使用UUID的好處在分布式的軟體系統中(比如:DCE/RPC, COM+,CORBA)就能體現出來,它能保證每個節點所生成的標識都不會重復,並且隨著WEB服務等整合技術的發展,UUID的優勢將更加明顯.
關於UUID的更多信息可以多google 一下.
Java生成UUID
UUID(Universally Unique Identifier)全局唯一標識符,是指在一台機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的.按照開放軟體基金會(OSF)制定的標准計算,用到了乙太網卡地址,納秒級時間,晶元ID碼和許多可能的數字.由以下幾部分的組合:當前日期和時間(UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同),時鍾序列,全局唯一的IEEE機器識別號(如果有網卡,從網卡獲得,沒有網卡以其他方式獲得),UUID的唯一缺陷在於生成的結果串會比較長.
在Java中生成UUID主要有以下幾種方式:
JDK1.5
如果使用的JDK1.5的話,那麼生成UUID變成了一件簡單的事,以為JDK實現了UUID:
java.util.UUID, 直接調用即可.
UUID uuid = UUID.randomUUID();
String s = UUID.randomUUID().toString();//用來生成資料庫的主鍵id非常不錯..
Java代碼
package com.taobao.tddl.client.util;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.ReentrantLock;

/**
* @author huangshang
*
*/
public class UniqId {
private static char[] digits = { '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

private static Map<Character, Integer> rDigits = new HashMap<Character, Integer>(
16);
static {
for (int i = 0; i < digits.length; ++i) {
rDigits.put(digits[i], i);
}
}

private static UniqId me = new UniqId();
private String hostAddr;
private Random random = new SecureRandom();
private MessageDigest mHasher;
private UniqTimer timer = new UniqTimer();

private ReentrantLock opLock = new ReentrantLock();

private UniqId() {
try {
InetAddress addr = InetAddress.getLocalHost();

hostAddr = addr.getHostAddress();
} catch (IOException e) {
hostAddr = String.valueOf(System.currentTimeMillis());
}

if (hostAddr == null || hostAddr.length() == 0
|| "127.0.0.1".equals(hostAddr)) {
hostAddr = String.valueOf(System.currentTimeMillis());
}

try {
mHasher = MessageDigest.getInstance("MD5");
} catch (NoSuchAlgorithmException nex) {
mHasher = null;
}
}

/**
* 獲取UniqID實例
*
* @return UniqId
*/
public static UniqId getInstance() {
return me;
}

/**
* 獲得不會重復的毫秒數
*
* @return
*/
public long getUniqTime() {
return timer.getCurrentTime();
}

/**
* 獲得UniqId
*
* @return uniqTime-randomNum-hostAddr-threadId
*/
public String getUniqID() {
StringBuffer sb = new StringBuffer();
long t = timer.getCurrentTime();

sb.append(t);

sb.append("-");

sb.append(random.nextInt(8999) + 1000);

sb.append("-");
sb.append(hostAddr);

sb.append("-");
sb.append(Thread.currentThread().hashCode());

return sb.toString();
}

/**
* 獲取MD5之後的uniqId string
*
* @return uniqId md5 string
*/
public String getUniqIDHashString() {
return hashString(getUniqID());
}

/**
* 獲取MD5之後的uniqId
*
* @return byte[16]
*/
public byte[] getUniqIDHash() {
return hash(getUniqID());
}

/**
* 對字元串進行md5
*
* @param str
* @return md5 byte[16]
*/
public byte[] hash(String str) {
opLock.lock();
try {
byte[] bt = mHasher.digest(str.getBytes("UTF-8"));
if (null == bt || bt.length != 16) {
throw new IllegalArgumentException("md5 need");
}
return bt;
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("unsupported utf-8 encoding", e);
} finally {
opLock.unlock();
}
}

/**
* 對二進制數據進行md5
*
* @param str
* @return md5 byte[16]
*/
public byte[] hash(byte[] data) {
opLock.lock();
try {
byte[] bt = mHasher.digest(data);
if (null == bt || bt.length != 16) {
throw new IllegalArgumentException("md5 need");
}
return bt;
} finally {
opLock.unlock();
}
}

/**
* 對字元串進行md5 string
*
* @param str
* @return md5 string
*/
public String hashString(String str) {
byte[] bt = hash(str);
return bytes2string(bt);
}

/**
* 對位元組流進行md5 string
*
* @param str
* @return md5 string
*/
public String hashBytes(byte[] str) {
byte[] bt = hash(str);
return bytes2string(bt);
}

/**
* 將一個位元組數組轉化為可見的字元串
*
* @param bt
* @return
*/
public String bytes2string(byte[] bt) {
int l = bt.length;

char[] out = new char[l << 1];

for (int i = 0, j = 0; i < l; i++) {
out[j++] = digits[(0xF0 & bt[i]) >>> 4];
out[j++] = digits[0x0F & bt[i]];
}

return new String(out);
}

/**
* 將字元串轉換為bytes
*
* @param str
* @return byte[]
*/
public byte[] string2bytes(String str) {
if (null == str) {
throw new NullPointerException("參數不能為空");
}
if (str.length() != 32) {
throw new IllegalArgumentException("字元串長度必須是32");
}
byte[] data = new byte[16];
char[] chs = str.toCharArray();
for (int i = 0; i < 16; ++i) {
int h = rDigits.get(chs[i * 2]).intValue();
int l = rDigits.get(chs[i * 2 + 1]).intValue();
data[i] = (byte) ((h & 0x0F) << 4 | (l & 0x0F));
}
return data;
}

/**
* 實現不重復的時間
*
* @author dogun
*/
private static class UniqTimer {
private AtomicLong lastTime = new AtomicLong(System.currentTimeMillis());

public long getCurrentTime() {
return this.lastTime.incrementAndGet();
}
}
}

⑵ 怎麼用JAVA產生唯一ID號

  1. uuid

  2. 時間戳

  3. 隨機數+用戶id

    -- 來自億千年信息科技有限公司的回答

⑶ java如何對一個字元串生成唯一的編碼

JAVA類庫中可以使用UUID方法,來生成唯一的數字的一串數字編號,也就是訂單號。
UUID.randomUUID().toString().replaceAll("-", "");通過上述方法就可以返回一串數字字元串。

⑷ Java生成UUID通用唯一識別碼有哪些

UUID含義是通用唯一識別碼 (Unive
sally Unique Identifie
),這 是一個軟體建構的標准,
也是
被開源軟體基金會 (Open Softwa
e Foundation, OSF) 的組織在分布式計算環境 (Dist
i
uted Computing Envi
onment, DCE) 領域的一部份。UUID 的目的,是讓分布式系統中的所有元素,都能有唯一的辨識資訊,而不需要透過中央控制端來做辨識資訊的指定。如此一來,每個人都可以建立不與其它人沖突的 UUID。在這樣的情況下,就不需考慮資料庫建立時的名稱重復問題。目前最廣泛應用的 UUID,即是微軟的 Mic
osoft's Glo
ally Unique Identifie
s (GUIDs),而其他重要的應用,則有 Linux ext2
ext3 檔案系統、LUKS 加密分割區、GNOME、KDE、Mac OS X 等等。

⑸ 用java實現字母與數字混合的唯一序號,且要遞增

importjava.util.LinkedList;

publicclassReplaceNumber
{
publicstaticvoidmain(String[]args)
{
LinkedList<String>result=newLinkedList<String>();
charr='0',g='0',b='0';
Stringrgb=""+r+g+b;
while(!"ZZZ".equals(rgb))
{
if(b<':'||(b>='A'-1&&b<='Z'))
{
b++;
}
if(':'==b||'Z'+1==b)
{
if(g<':')
{
g++;
b='9';
}
if(g<'Z'+1&&g>':')
{
g++;
b='Z';
}
}
if(':'==g||'Z'+1==g)
{
if(r<'9')
{
r++;
g='9';
}
if(r<'Z'+1&&r>':')
{
r++;
g='Z';
}
}
rgb=""+r+g+b;
if("999".equals(rgb))
{
r='A';
g='0';
b='0';
}
if("A99".equals(rgb))
{
r='A';
g='A';
b='0';
}
if("AA9".equals(rgb))
{
r='A';
g='A';
b='A'-1;
}
result.add(rgb);
}
System.out.println("唯一序列號: "+result.toString().replaceAll("[\[\]]","").replaceAll("\,"," "));
}
}

⑹ 什麼是UUID,Java中怎麼產生UUID

UUID 是 通用唯一識別碼(Universally Unique Identifier)的縮寫,是一種軟體建構的標准,亦為開放軟體基金會組織在分布式計算環境領域的一部分。其目的,是讓分布式系統中的所有元素,都能有唯一的辨識信息,而不需要通過中央控制端來做辨識信息的指定。

生成UUID的方法:

public static String getUUID32(){ String uuid = UUID.randomUUID().toString().replace("-", "").toLowerCase(); return uuid;// return UUID.randomUUID().toString().replace("-", "").toLowerCase();}

註:因為一般資料庫主鍵為String類型,所以接收類型為String,生成的uuid數據包含-,所以要去掉-,故UUID.randomUUID().toString().replace("-", "").toLowerCase()。

(6)java唯一編號擴展閱讀

UUID由以下幾部分的組合:

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

(2)時鍾序列。

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

UUID的唯一缺陷在於生成的結果串會比較長。關於UUID這個標准使用最普遍的是微軟的GUID(Globals Unique Identifiers)。在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),可以從cflib 下載CreateGUID() UDF進行轉換。

⑺ java輸入唯一編號,這么干可以嗎

可以把信息存放到HashMap里,key為EmpNO,value為Emp。直接可以判斷是否包含EmpNO特定值

⑻ java怎麼生成一個唯一的只有數字的訂單號

JAVA類庫中可以使用UUID方法,來生成唯一的數字的一串數字編號,也就是訂單號。
UUID.randomUUID().toString().replaceAll("-", "");通過上述方法就可以返回一串數字字元串。

⑼ java怎麼獲取電腦的唯一標識

UUID uuid=UUID.randomUUID();
System.out.println(uuid.toString());

UUID含義是通用唯一識別碼 (Universally Unique Identifier),這 是一個軟體建構的標准,也是被開源軟體基金會 (Open Software Foundation, OSF) 的組織應用在分布式計算環境 (Distributed Computing Environment, DCE) 領域的一部分。

⑽ 用java獲得機器的唯一號

一、上Google搜一下Mac及CPU ID的C代碼
二、上java.sun.com找那個JNI的指南
三、你用二的方法把一的代碼給包一下。

其實利用在java中的runtime來執行在win裡面的ipconfig -all的命令可以實現的!!

java.lang.Process proc = Runtime.getRuntime().exec("ipconfig /all");
InputStream istr = proc.getInputStream();
byte[] data = new byte[1024];
istr.read(data);
netdata = new String(data);

分析其中的netdata就是那!,有關cpu的可以類同實現!

閱讀全文

與java唯一編號相關的資料

熱點內容
生意不忙怎麼解壓 瀏覽:500
歡太健康app在哪裡下載 瀏覽:488
androidtools使用教程 瀏覽:971
十天突破雅思口語pdf劍9 瀏覽:295
李誕笑場pdf 瀏覽:265
自用紙巾做解壓筆 瀏覽:129
銀行流水解壓碼是多少 瀏覽:895
百度哪個app好用 瀏覽:316
115廣告聯盟源碼 瀏覽:494
聯通app簽到源碼 瀏覽:680
怎麼連接另一個伺服器的資料庫 瀏覽:742
貓盤洗白命令 瀏覽:844
168api源碼 瀏覽:967
不同地方的文件伺服器如何通信 瀏覽:599
自己電腦上搭建ftp伺服器地址 瀏覽:977
程序員的秋招秘籍 瀏覽:821
單片機國內外研究現狀 瀏覽:308
gta5如何進千人真實伺服器 瀏覽:996
電腦html壁紙源碼 瀏覽:726
c語言返回命令 瀏覽:933