`
福将1032
  • 浏览: 44682 次
文章分类
社区版块
存档分类
最新评论

IDGenerator UUID

 
阅读更多

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());
        }
    }
}

分享到:
评论

相关推荐

    jdk与javauuidgenerator生成uuid

    UUID主要由三部分组成:时间戳、随机数和节点ID,这确保了其在全球范围内的唯一性。 首先,我们来看JDK自带的`java.util.UUID`类。这个类提供了多种生成UUID的方法,如`randomUUID()`,`nameUUIDFromBytes()`,`...

    用hibernate形式uuid的生成算法

    UUID(Universally Unique Identifier),即通用唯一识别码,是一种用于创建唯一标识符的机制,常用于分布式系统中,确保每个实体都有一个独一无二的ID。本文将深入探讨如何使用Hibernate的形式生成UUID,通过分析一...

    唯一uuidid生成器

    Java中的UUID生成和特定的ID生成库如Vesta-ID-Generator,为开发者提供了灵活和可靠的工具来解决这一问题。在实际应用中,选择合适的ID生成策略和库,需要考虑系统的规模、性能需求以及数据的唯一性和安全性。

    UUID生成UUIDs的库

    在实际开发中,`ramsey/uuid` 可用于生成数据库主键、分布式系统中的唯一ID、或者在多个系统之间进行安全通信时的身份验证等场景。其强大的功能和灵活性使得它成为PHP开发者处理全局唯一标识符的首选工具之一。

    UUID Generator-crx插件

    UUID Generator-crx插件是一款专为英语用户设计的浏览器扩展程序,主要功能是生成符合UUID v4标准的唯一标识符。UUID,全称Universally Unique Identifier,是一种在分布式计算环境中确保标识符全球唯一性的标准。它...

    Hibernate用UUID作为主键的Demo

    这里,`@GeneratedValue(generator = "uuid2")`指定了使用uuid2生成策略,而`@GenericGenerator(name = "uuid2", strategy = "uuid2")`定义了一个名为“uuid2”的生成器,其策略为“uuid2”,这是JPA中预定义的UUID...

    java uuid jug实例(采用开源jug)

    此外,JUG还支持预生成UUID序列,这对于批量操作或者分布式系统中的ID一致性特别有用。 在使用JUG时,首先需要将其添加到项目依赖中。如果是Maven项目,可以在pom.xml文件中添加如下依赖: ```xml &lt;groupId&gt;...

    UUID Generator-开源

    一个非常简单的 Java SE 项目,用于创建单个或批量 UUID。 创建单个 UUID 会复制到剪贴板中,并可在其他应用程序中使用,同时使用 UUID 作为唯一记录 ID 手动修改数据库中的记录。

    UUID-generator:uuid生成工具

    工具说明 ====================== 返回... 可选地,可以在 UUID 的每个组件之间使用分隔符生成字符串。 如果你想像使用这个工具一样使用这个工具: UUIDGenerator.getUUID(); 以上是我自己的代码,欢迎大家一起讨论~

    cordova-plugin-generator-uuid:用于生成用于应用程序的 UUID 的cordova 插件

    2. **UUID的作用**:在移动应用中,UUID常用于匿名标识用户设备,避免直接使用IMEI或者设备ID可能会引发的隐私问题。此外,UUID也用于跟踪应用状态、实现多设备同步,或者在推送通知等场景中定位特定设备。 3. **...

    UUID generator-crx插件

    UUID generator-crx插件是一款专为英语用户设计的实用工具,主要用于快速生成和复制Universally Unique Identifier(UUID)。UUID是一个128位的数字,通常用32个十六进制数字表示,它能够保证在全局范围内的唯一性,...

    JavaUUIDGenerator.zip

    UUID按照开放软件基金会 (OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与 时间有关,如果你在生成一个UUID之后,过几秒又...

    Java通用Mapper UUID简单示例

    @Id@GeneratedValue(strategy = GenerationType.IDENTITY,generator = "select uuid()") private String id; 这种方式可以正确地获取UUID的值,但是需要注意的是,在配置时需要设置ORDER属性,以确保正确地执行SQL...

    uuid-readable:生成易于记忆,可读的UUID,它们是莎士比亚的语法上正确的句子:partying_face:

    生成易于记忆,可读的UUID,它们是莎士比亚的语法上正确的句子 :partying_face: 建立在UUID v4之上 (可选)传递您的UUID以生成唯一的句子 128位加密安全 语法正确的句子 容易记住 有莎士比亚的感觉 通用唯一...

    hibernate中的generator的生成方式hibernate中的generator的生成方式

    在Hibernate中,`Generator`是负责生成主键值的策略,通常在`&lt;id&gt;`元素中通过`class`属性指定。不同的数据库和不同的应用场景可能需要不同的生成策略。接下来,我们将逐一介绍各种常见的生成策略及其适用场景。 ###...

    uuid:简单的客户端JavaScript实用程序,用于生成抗冲突的UUID

    Web UUID JS 用于在Web浏览器中生成抗碰撞UUID的简单实用程序 使用NPM安装 npm install uuid-js 使用Yarn进行安装 yarn add uuid-js 用法示例 import uuid from "web-uuid-js" ; const Uuid = uuid ( ) ; 运行...

    uuidgenerator

    - 在事件驱动架构中,UUID作为事件ID,追踪事件的来源和处理流程。 总结一下,`uuidgenerator`是一个JavaScript库,用于生成和处理UUID,它可能提供了多个UUID版本的生成方法,并且可能包含源代码、文档和测试资源...

    doctrine-ordered-uuid-generator:添加了一个 Doctrine Id 生成器,它在 MySQL 中使用有序的 UUID 以获得额外的性能。 使用 Karhik Appigatla 的文章 (http

    #安装和使用添加到作曲家要求 " mbbender/doctrine-ordered-uuid-generator " : " dev-master " ##Register 类型与实体管理器 Doctrine \ DBAL \ Types \ Type :: addType ( 'ordered_guid' , 'Mbbender\Doctrine\...

    activit5的主键问题

    通过分析源码,我们发现 Activiti 的流程引擎的主键引用采用的方式是先看 Spring 配置的 idGenerator 属性是否有外部注入,如果没有,才使用默认的主键策略生成主键。所以,我们只需要针对配置文件进行主键策略的...

    java 获取分布式唯一ID.雪花ID

    public class SnowflakeIdGenerator { private static final SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0); public static long generateId() { return idWorker.nextId(); } } ``` 在这个例子中...

Global site tag (gtag.js) - Google Analytics