`
wdq
  • 浏览: 38727 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

UUID的算法

    博客分类:
  • Java
阅读更多

看了官方的教程,说Hibernate中的uuid算法是这样的:

UUID包含:IP地址,JVM的启动时间(精确到1/4秒),系统时间和一个计数器值(在JVM中唯一)。

import java.net.InetAddress;

public class UUIDHexGenerator {
private String sep = "";

private static final int IP;

private static short counter = (short) 0;

private static final int JVM = (int) (System.currentTimeMillis() >>> 8);

private static UUIDHexGenerator uuidgen = new UUIDHexGenerator();

static {

   int ipadd;
   try {
    ipadd = toInt(InetAddress.getLocalHost().getAddress());
   } catch (Exception e) {
    ipadd = 0;
   }
   IP = ipadd;
}

public static UUIDHexGenerator getInstance() {
   return uuidgen;
}

public static 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;
}

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

protected int getJVM() {
   return JVM;
}

protected synchronized short getCount() {
   if (counter < 0) {
    counter = 0;
   }
   return counter++;
}

protected int getIP() {
   return IP;
}

protected short getHiTime() {
   return (short) (System.currentTimeMillis() >>> 32);
}

protected int getLoTime() {
   return (int) System.currentTimeMillis();
}

public String generate() {
   return new StringBuffer(36).append(format(getIP())).append(sep).append(
     format(getJVM())).append(sep).append(format(getHiTime()))
     .append(sep).append(format(getLoTime())).append(sep).append(
       format(getCount())).toString();
}

// public static void main(String[] str) {
//   UUIDHexGenerator id = new UUIDHexGenerator();
//   for (int i = 0; i <= 100; i++) {
//    System.out.println(id.generate());
//   }
// }

}




 

 

 

分享到:
评论

相关推荐

    公司实际项目中采用UUID算法生成主键的工具类

    公司实际项目中采用UUID算法生成主键的工具类,有需要的朋友们可以拿去

    利用雪花算法生成uuid

    雪花算法(Snowflake)是Twitter开源的一种分布式ID生成算法,它能有效地生成全局唯一的64位ID,这在很多场景下可以替代传统的UUID。 雪花算法的核心思想是将ID分为多个部分,分别是时间戳、工作节点ID和序列号,...

    简单的uuid生产代码

    简单的uuid生产代码 uuid生产代码 uuid生产代码

    UUID 烧录代码 C语言 DOS下运行

    2. **生成UUID算法**:UUID的生成通常基于特定算法,包括时间戳、MAC地址、随机数等。但在DOS环境下,没有直接获取MAC地址的API,因此可能需要使用其他方式生成UUID。一种方法是使用系统时钟和随机数生成器来创建一...

    用hibernate形式uuid的生成算法

    ### 使用Hibernate形式生成UUID的算法解析 在Java开发领域,特别是使用Hibernate框架进行数据库操作时,唯一标识符(UUID)的生成是常见的需求之一。UUID(Universally Unique Identifier),即通用唯一识别码,是...

    PB生成UUID.zip

    生成UUID的过程可以通过PB提供的库函数实现,这些函数通常封装了生成UUID的具体算法,如RFC4122标准定义的算法。 UUID有多种版本,包括时间戳、MAC地址、随机数等方法生成。在PB中,具体使用哪种方式取决于所使用的...

    ThinkPad System UUID1.82

    这个工具通过优化UUID生成算法,提高了与ThinkPad系列电脑的兼容性。 4. **易用性**:1.82.exe是这个工具的执行文件,用户只需运行该程序,按照提示操作,即可快速生成UUID并应用到U盘启动盘制作中,无需专业知识。...

    Math.uuid.js

    其内部实现主要依赖于JavaScript的内置Math对象和一些随机算法,确保生成的UUID具有足够的随机性和唯一性。 Math.uuid.js的使用非常简单,只需在项目中引入该库,然后调用其提供的函数即可生成UUID。例如,我们可以...

    UUID SPEC (Universally Unique IDentifier (UUID) URN Namespace)

    - **概述**:版本3和版本5的UUID是根据名称字符串生成的,其中版本3使用MD5散列算法,而版本5使用SHA-1散列算法。 - **生成步骤**:包括将名称字符串和命名空间ID组合起来进行散列计算,并按照规定格式填充UUID的...

    uuid.zip_uuid

    这里,uuid.cpp可能实现了UUID生成器的具体算法,而uuid.h则可能包含了相关类的声明,以便其他模块可以引用和使用。 UUID的设计标准有多种版本,如UUID版本1到5,每种都有其特定的生成机制。例如: 1. 版本1:基于...

    JPA主键策略(针对数据库自增字段重置后无效检查项)

    uuid是一种基于128位的uuid算法生成主键的策略。这种策略生成的主键是一个32位的16进制数字的字符串。这种策略占用空间较大,因为主键是一个字符串类型的字段。uuid策略适用于需要高唯一性的场景,但它占用空间较大...

    UUID C代码实现

    UUID 由RFC4122文档定义,里面有实现,不过需要加上SHA1算法,MD5算法才完整。我整理了SHA1 MD5算法,实现了一个可直接使用的UUID的生成算法。

    jdk与javauuidgenerator生成uuid

    如果这是某个开源库,那么它可能会提供一些额外的功能,如基于特定算法、性能优化或其他特定需求的UUID生成。为了详细了解这个库,需要查看具体的库文档或源代码。 在实际应用中,UUID常用于数据库主键、分布式系统...

    根据时间自动生成编号,很实用.zip

    UUID算法基于随机数或基于时间,确保了极低的重复率。 3. **自增序列**:在数据库环境中,自增序列常用于主键,每次插入新记录时自动递增。不过,这种方法不包含时间信息,如果需要与时间相关联,可能需要结合其他...

    activit5的主键问题

    Activiti 本身的 id 字段也支持 UUID 算法来生成主键。我们可以通过在配置文件中指定主键策略来实现 UUID 生成策略。 在实施方案中,我们可以直接用 Activiti 官方提供的 activiti-explorer 项目来更换主键策略。...

    javascript生成uuid的js库文件

    其中,V1基于时间戳和MAC地址生成,V4完全是随机生成,V5则基于命名空间和SHA-1哈希算法。 2. `uuid`库(之前称为`node-uuid`):这是另一个广泛使用的库,支持浏览器和Node.js环境。它同样遵循RFC4122标准,提供了...

    Hibernate内置标识符生成器

    这两种生成器使用 128 位的 UUID 算法,生成全局唯一的标识符。`uuid.hex` 生成的是 32 位的十六进制字符串,而 `uuid.string` 则生成 16 个字符的字符串形式。`uuid.hex` 不适用于 PostgreSQL 数据库。 8. ...

    微骏CMS内容管理系统 v1.0 正式版

    微骏CMS系统主要是网站内容管理的一个软件解决方案,该系统集成了文章、软件、视频、图片模型。 1.0正式版主要改动: ...12.系统采用UUID算法来添加文章等数据量大的表(让你移植任意不同数据库没压力) 13.

    微骏CMS内容管理系统 v1.0 RC.rar

    12.系统采用UUID算法来添加文章等数据量大的表(让你移植任意不同数据库没压力) 13.支付宝在线支付功能(需要在后台修改配置参数才能正常使用) 14.加密采用盐值加密策略(不可逆转的生成算法,告别密码门) 15....

    唯一uuidid生成器

    标准UUID是通过随机数或基于时间的算法生成的,而结合IP地址等信息则是在此基础上增加了一层额外的保证,确保即使在短时间内重复生成,也能得到不同的ID。 在Java编程语言中,生成UUID非常简单,可以直接使用`java....

Global site tag (gtag.js) - Google Analytics