package com.joyveb.common.utils;
import java.net.InetAddress;
public class IDGenerator {
/**
* generateId,生成Id
*
* @return String 返回GUID字符串
*/
public synchronized String generate() {
return new StringBuffer(36).append(IPString).append(JVMString)
.append(format(getHiTime())).append(format(getLoTime()))
.append(format(getCount())).toString();
}
/**
* 单例对象的获取函数
*
*
* @return GUIDHexGenerator
*/
public static IDGenerator getInstance() {
if (instance == null) {
synchronized (IDGenerator.class) {
if (instance == null) {
instance = new IDGenerator();
}
}
}
return instance;
}
private static volatile IDGenerator instance;
private final int IP;
{
int ipadd;
try {
ipadd = toInt(InetAddress.getLocalHost().getAddress());
} catch (Exception e) {
ipadd = 0;
}
IP = ipadd;
}
private final String IPString = format(IP);
private static short counter = (short) 0;
private final int JVM = (int) (System.currentTimeMillis() >>> 8);
private final String JVMString = format(JVM);
/**
* 通过JVM使id好对于不同的JVM不重复,除非它们同时装载这个类 Unique across JVMs on this machine
* (unless they load this class in the same quater second - very unlikely)
*/
protected int getJVM() {
return JVM;
}
/**
* Unique in a millisecond for this JVM instance (unless there are
* Short.MAX_VALUE instances created in a millisecond)
*/
protected short getCount() {
counter++;
if (counter < 0) {
counter = 0;
}
return counter;
}
/**
* IP地址使局域网内唯一,如果你用网卡物理号则全球唯一了:)
*/
protected int getIP() {
return IP;
}
/**
* Unique down to millisecond
*/
protected short getHiTime() {
short hiTime = (short) ((System.currentTimeMillis() >>> 32) & 0xFFFF);
return hiTime;
}
protected int getLoTime() {
return (int) System.currentTimeMillis();
}
// private static final String SEPERATOR = "";
protected String format(int intval) {
String formatted = Integer.toHexString(intval);
StringBuffer buf = new StringBuffer("00000000");
buf.replace(8 - formatted.length(), 8, formatted);
return buf.toString();
}
protected String format(short shortval) {
String formatted = Integer.toHexString(shortval);
StringBuffer buf = new StringBuffer("0000");
buf.replace(4 - formatted.length(), 4, formatted);
return buf.toString();
}
private int toInt(byte[] bytes) {
int result = 0;
for (int i = 0; i < 4; i++) {
result = (result << 8) - Byte.MIN_VALUE + (int) bytes[i];
}
return result;
}
public static byte[] toBytes(short value) {
byte[] result = new byte[2];
result[1] = (byte) ((0xFFl & value) + Byte.MIN_VALUE);
result[0] = (byte) ((0xFFl & (value >>> 8)) + Byte.MIN_VALUE);
return result;
}
public static void main(String[] str) {
for (int i = 0; i <= 100; i++) {
System.out.println(IDGenerator.getInstance().generate());
}
}
}
分享到:
相关推荐
UUID主要由三部分组成:时间戳、随机数和节点ID,这确保了其在全球范围内的唯一性。 首先,我们来看JDK自带的`java.util.UUID`类。这个类提供了多种生成UUID的方法,如`randomUUID()`,`nameUUIDFromBytes()`,`...
UUID(Universally Unique Identifier),即通用唯一识别码,是一种用于创建唯一标识符的机制,常用于分布式系统中,确保每个实体都有一个独一无二的ID。本文将深入探讨如何使用Hibernate的形式生成UUID,通过分析一...
Java中的UUID生成和特定的ID生成库如Vesta-ID-Generator,为开发者提供了灵活和可靠的工具来解决这一问题。在实际应用中,选择合适的ID生成策略和库,需要考虑系统的规模、性能需求以及数据的唯一性和安全性。
在实际开发中,`ramsey/uuid` 可用于生成数据库主键、分布式系统中的唯一ID、或者在多个系统之间进行安全通信时的身份验证等场景。其强大的功能和灵活性使得它成为PHP开发者处理全局唯一标识符的首选工具之一。
UUID Generator-crx插件是一款专为英语用户设计的浏览器扩展程序,主要功能是生成符合UUID v4标准的唯一标识符。UUID,全称Universally Unique Identifier,是一种在分布式计算环境中确保标识符全球唯一性的标准。它...
这里,`@GeneratedValue(generator = "uuid2")`指定了使用uuid2生成策略,而`@GenericGenerator(name = "uuid2", strategy = "uuid2")`定义了一个名为“uuid2”的生成器,其策略为“uuid2”,这是JPA中预定义的UUID...
此外,JUG还支持预生成UUID序列,这对于批量操作或者分布式系统中的ID一致性特别有用。 在使用JUG时,首先需要将其添加到项目依赖中。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml <groupId>...
一个非常简单的 Java SE 项目,用于创建单个或批量 UUID。 创建单个 UUID 会复制到剪贴板中,并可在其他应用程序中使用,同时使用 UUID 作为唯一记录 ID 手动修改数据库中的记录。
工具说明 ====================== 返回... 可选地,可以在 UUID 的每个组件之间使用分隔符生成字符串。 如果你想像使用这个工具一样使用这个工具: UUIDGenerator.getUUID(); 以上是我自己的代码,欢迎大家一起讨论~
2. **UUID的作用**:在移动应用中,UUID常用于匿名标识用户设备,避免直接使用IMEI或者设备ID可能会引发的隐私问题。此外,UUID也用于跟踪应用状态、实现多设备同步,或者在推送通知等场景中定位特定设备。 3. **...
UUID generator-crx插件是一款专为英语用户设计的实用工具,主要用于快速生成和复制Universally Unique Identifier(UUID)。UUID是一个128位的数字,通常用32个十六进制数字表示,它能够保证在全局范围内的唯一性,...
UUID按照开放软件基金会 (OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与 时间有关,如果你在生成一个UUID之后,过几秒又...
@Id@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select uuid()") private String id; 这种方式可以正确地获取UUID的值,但是需要注意的是,在配置时需要设置ORDER属性,以确保正确地执行SQL...
生成易于记忆,可读的UUID,它们是莎士比亚的语法上正确的句子 :partying_face: 建立在UUID v4之上 (可选)传递您的UUID以生成唯一的句子 128位加密安全 语法正确的句子 容易记住 有莎士比亚的感觉 通用唯一...
在Hibernate中,`Generator`是负责生成主键值的策略,通常在`<id>`元素中通过`class`属性指定。不同的数据库和不同的应用场景可能需要不同的生成策略。接下来,我们将逐一介绍各种常见的生成策略及其适用场景。 ###...
Web UUID JS 用于在Web浏览器中生成抗碰撞UUID的简单实用程序 使用NPM安装 npm install uuid-js 使用Yarn进行安装 yarn add uuid-js 用法示例 import uuid from "web-uuid-js" ; const Uuid = uuid ( ) ; 运行...
- 在事件驱动架构中,UUID作为事件ID,追踪事件的来源和处理流程。 总结一下,`uuidgenerator`是一个JavaScript库,用于生成和处理UUID,它可能提供了多个UUID版本的生成方法,并且可能包含源代码、文档和测试资源...
#安装和使用添加到作曲家要求 " mbbender/doctrine-ordered-uuid-generator " : " dev-master " ##Register 类型与实体管理器 Doctrine \ DBAL \ Types \ Type :: addType ( 'ordered_guid' , 'Mbbender\Doctrine\...
通过分析源码,我们发现 Activiti 的流程引擎的主键引用采用的方式是先看 Spring 配置的 idGenerator 属性是否有外部注入,如果没有,才使用默认的主键策略生成主键。所以,我们只需要针对配置文件进行主键策略的...
public class SnowflakeIdGenerator { private static final SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0); public static long generateId() { return idWorker.nextId(); } } ``` 在这个例子中...