1. 程式人生 > >自動生成全域性連續id的工具類

自動生成全域性連續id的工具類



import java.util.HashSet;
import java.util.Random;
import java.util.ResourceBundle;
import java.util.UUID;


/**
 * 
 *類名稱:各種id生成策略
 *類描述:
 *
 *編 寫 人:kxw
 *編寫日期:2016-8-29
 *
 *修改人:
 *修改日期:
 *修改內容:
 *
 *版本:1.0
 */
public class IDUtils {
	
	private static int id=0;
	private static long time;
	private static String hostCode;//主機編號
	static{
		//讀取配置檔案
		ResourceBundle conf = ResourceBundle.getBundle("host");
		hostCode=conf.getString("hostCode");
		
	}

	/**
	 * 圖片名生成
	 */
	public static String genImageName() {
		//取當前時間的長整形值包含毫秒
		long millis = System.currentTimeMillis();
		//long millis = System.nanoTime();
		//加上三位隨機數
		Random random = new Random();
		int end3 = random.nextInt(999);
		//如果不足三位前面補0
		String str = millis + String.format("%03d", end3);
		
		return str;
	}
	
	/**
	 * id生成
	 */
	public static long getId() {
		//取當前時間的長整形值包含毫秒
		long millis = System.currentTimeMillis();
		//long millis = System.nanoTime();
		//加上兩位隨機數
		long end3 = getRand(millis);
		//如果不足兩位前面補0
//		String str = millis + String.format("%03d", end3);
//		long id = new Long(str);
		return end3;
	}
	
	
	
	private synchronized static long getRand(long l){
		if(l>time){
			time=l;
			id=0;
		}else{
			id++;	
		}
		
		if(id>99){
			id=0;
			time=time+1;
		}
		String str = time+hostCode + String.format("%02d", id);
		long ids = new Long(str);
		//System.out.println(ids);
		return ids;
	}
	
	
	
	
	
	
	
	
	
	
	public static void main(String[] args) {
		int m=0;
		System.out.println(System.currentTimeMillis());
		HashSet hashSet = new HashSet();
		for(int i=0;i<99999;i++){
//			
//			if(getId()==getId()){
//				m++;
//				System.out.println("重複了"+m+"ci");	
//			}
			hashSet.add(getId());
		}
		System.out.println(hashSet.size());
		System.out.println(getId());
		System.out.println(System.currentTimeMillis());
			System.out.println(UUID.randomUUID().toString());
		if(UUID.randomUUID().toString().equals(UUID.randomUUID().toString())){
			m++;
			System.out.println("重複了"+m+"ci");
		}
	}
}

相關推薦

自動生成全域性連續id工具

import java.util.HashSet; import java.util.Random; import java.util.ResourceBundle; import java.util.UUID; /** * *類名稱:各種id生成策略 *類

ibator 工具補充自動生成Manager介面,ManagerImpl

       經常用ibator工具生成VO和DAO,但是有個麻煩的就是沒有manager類,昨天有空手工寫了一個根據DAO和DAOImp生成Manager和ManagerImpl的工具,工具還可以把通過資料庫生成的xml檔案裡的DATE型

雪花演算法生成長整型ID工具SnowflakeUtil

JS語言不支援15位以上的長整型,該工具使用與否要有取捨。 public class SnowflakeUtil { /** 開始時間截 (2015-01-01) */ private final static long TWEPOCH = 1420041600000L;

生成32位字串ID工具UUIDUtil

public class UUIDUtils { public static String getUUID() { String s = UUID.randomUUID().toString(); return s.substring(0, 8) + s.substring(9, 1

比UUID效率更高的生成id工具

package com.test.util; import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.NetworkInterface; /**

生成隨機ID工具

import java.util.Random; /**  * 各種id生成策略  */ public class IDUtils {/*** 圖片名生成*/public static String genImageName() {//取當前時間的長整形值包含毫秒long

生成訂單編號的工具

println syn private span java log out tor edate package com.qiyuan.util; import java.text.SimpleDateFormat; import java.util.Date; pub

IDEA自動生成序列化ID

img setting 技術 all ide test IT inf PE File -> Settings -> Editor -> Inspections -> 搜索 Serialization issues ,找到 Serializable c

點選生成動態驗證碼(工具)

1.頁面 <!--驗證碼--> <div class="col-sm-3"> <img id="vcode" src="/checkCode" style="cursor:pointer"> </div>

利用mybatis-generator自動生成程式碼-表對應的和配置檔案

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configu

生成count位隨機數工具

工具類 import java.util.Random; /** * 生成6位隨機數字 */ public class GeneratorCode { /** * * @Title: getCode * @Description: 生成count個隨機數 * @par

go分散式生成全域性唯一ID

因為snowFlake目的是解決分散式下生成唯一id 所以ID中是包含叢集和節點編號在內的 const ( numberBits uint8 = 12 // 表示每個叢集下的每個節點,1毫秒內可生成的id序號的二進位制位 對應上圖中的最後一段 workerBits uint8 = 10

Java隨機生成圖片驗證碼工具/** * ttf字型檔案 * @author dsna * */ public class ImgFontByte { public Font g

/** * ttf字型檔案 * @author dsna * */ public class ImgFontByte { public Font getFont(int fontHeight){ try { Font baseFont = Font.createFo

Java 隨機生成手機驗證碼工具

package cn.it.feizi.until; import java.util.HashSet; import java.util.Iterator; import java.util.Random; import java.util.Set; public class PhoneCod

使用zxing生成二維碼工具

public class QRCodeUtils { /** * 建立二維碼(有白邊) * * @param string * @return */ public static Bitmap c

Spring Boot教你一種方法生成全域性唯一ID

一、概述 流水號生成器(全域性唯一 ID生成器)是服務化系統的基礎設施,其在保障系統的正確執行和高可用方面發揮著重要作用。而關於流水號生成演算法首屈一指的當屬 Snowflake雪花演算法,然而 Snowflake本身很難在現實專案中直接使用,因此實際應用時需要一種可落地的方案。 UidGe

如何在高併發分散式系統中生成全域性唯一Id

又一個多月沒冒泡了,其實最近學了些東西,但是沒有安排時間整理成博文,後續再奉上。最近還寫了一個發郵件的元件以及效能測試請看 《NET開發郵件傳送功能的全面教程(含郵件元件原始碼)》 ,還弄了個MSSQL引數化語法生成器,會在9月整理出來,有興趣的園友可以關注下我的部落格。 分享原由,最近公司用到,並

mybatis自動生成對應表的實體、介面和對映檔案

使用maven構建的專案,其中整合了mybatis,每次使用時都需要建立model實體類,dao介面和mapper對映檔案,為了方便開發,maven中有一種外掛可以直接生成資料庫表對應的實體類,介面和對映檔案 1.首先要在pom.xml檔案中加入外掛依賴,注意直接放在<

SSM利用mybatis-generator自動生成程式碼-表對應的和配置檔案

生成程式碼需要的檔案和jar包: 下載地址:http://download.csdn.net/detail/windflybird/9822991 <?xml version=

java生成二維碼工具,親測有效,轉載請標明出處,謝謝!

自動創建 oat for pub 輸出 工具類 port 需要 ase 工具類使用需要在項目中引入二維碼處理所需要的jar包 1.pom.xml首先加入 <!-- https://mvnrepository.com/artifact/com.google.zxing/