`
dingjun1
  • 浏览: 213604 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

UUID [转帖]

阅读更多
/***********本人原创,欢迎转载,转载请保留本人信息*************/
作者:王力猛 (wallimn)
电邮:wallimn@sohu.com
博客:http://wallimn.bokee.com
   http://blog.csdn.net/wallimn
时间:2006-11-15
/***********本人原创,欢迎转载,转载请保留本人信息*************/

  不知大家在写数据库程序的时候使用什么做主键,使用无意义的东东做主键是个很好的做法,很多人用SEQUENCE,可我觉得Hibernate中的UUID是个不错的选择,我把他剥出来,喜欢的人可以拿去用。
  算法如下:
 package com.xxh.hz.util;

import java.io.Serializable;
import java.net.InetAddress;
/**
 * 唯一主键生成办法。从Hibernate中提取出来。我一直觉得这不错,不用建什么Sequence
 * @version      :  V1.0
 * @author       : 王力猛(Email: wallimn@sohu.com  QQ: 54871876)
 * @date           : 2006-12-8 下午11:51:43
 */
public class UUIDGenerator {

 private static final int IP;
 public static int IptoInt( byte[] bytes ) {
  int result = 0;
  for (int i=0; i<4; i++) {
   result = ( result << 8 ) - Byte.MIN_VALUE + (int) bytes[i];
  }
  return result;
 }
 static {
  int ipadd;
  try {
   ipadd = IptoInt( InetAddress.getLocalHost().getAddress() );
  }
  catch (Exception e) {
   ipadd = 0;
  }
  IP = ipadd;
 }
 private static short counter = (short) 0;
 private static final int JVM = (int) ( System.currentTimeMillis() >>> 8 );

 public UUIDGenerator() {
 }

 /**
  * 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() {
  synchronized(UUIDGenerator.class) {
   if (counter<0) counter=0;
   return counter++;
  }
 }

 /**
  * Unique in a local network
  */
 protected int getIP() {
  return IP;
 }

 /**
  * Unique down to millisecond
  */
 protected short getHiTime() {
  return (short) ( System.currentTimeMillis() >>> 32 );
 }
 protected int getLoTime() {
  return (int) System.currentTimeMillis();
 }
 
 private final static String sep = "";

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

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

}
分享到:
评论

相关推荐

    uuid.rar_C获得UUID_UUID C_c生成uuid_c语言生成uuid_uuid

    标题“uuid.rar_C获得UUID_UUID C_c生成uuid_c语言生成uuid_uuid”表明这是一个关于使用C语言实现UUID生成的资源包。这个压缩包可能包含了一个C语言编写的程序或库,可以用来在Windows平台上(通过VC6编译器)生成...

    浅谈java获取UUID与UUID的校验

    java 获取 UUID 与 UUID 校验详解 Java 获取 UUID 是一个非常常见的操作,UUID(Universally Unique Identifier,全球唯一标识符)是一种软件建筑中用于标识信息的标识符。UUID 的主要用途是为了在分布式系统中生成...

    uuid.rar_uuid

    可能包含了如`uuid_generate()`用于生成新的UUID,`uuid_parse()`解析字符串形式的UUID,以及`uuid_compare()`比较两个UUID是否相同等函数。这些函数的实现通常基于RFC 4122,这是一个定义UUID生成和格式的标准。 ...

    PB生成UUID.zip

    标题中的"PB生成UUID"指的是在编程中使用Protocol Buffers(简称PB)生成Universally Unique Identifier(UUID)。UUID是一个128位的数字,通常表示为32个十六进制数字,用于唯一标识网络中的对象。它在分布式系统、...

    ThinkPad System UUID1.82

    【ThinkPad System UUID1.82】是一款专为联想ThinkPad笔记本电脑设计的系统UUID添加工具,主要用于在制作U盘启动盘时解决特定问题。UUID(Universally Unique Identifier)是全球唯一的标识符,用于区分不同的计算机...

    16bit UUID一览表

    16bit UUID一览表 16位UUID是一种通用唯一标识符,用于标识蓝牙设备中的服务、特征和特征描述符。它是一个16位的二进制数字,通常用十六进制表示法表示。16位UUID是一种广泛使用的标识符,在蓝牙技术中扮演着重要...

    Math.uuid.js

    《JavaScript中的UUID生成:深入理解Math.uuid.js》 在JavaScript编程中,UUID(Universally Unique Identifier)是一种广泛应用的全局唯一标识符,它主要用于创建对象的唯一ID,尤其是在分布式环境中。Math.uuid....

    Javascript生成UUID 三种方法

    ### JavaScript生成UUID的三种方法详解 #### 一、前言 在软件开发中,经常会遇到需要为特定的数据或对象分配唯一标识符的情况。UUID(通用唯一标识符)就是一种常用的解决方案,它能够确保生成的ID在空间和时间上...

    UUID封装直接调用直接下载用

    UUID,全称Universally Unique Identifier,是全局唯一标识符的缩写,是一种软件构造标准,用于在分布式系统中唯一标识信息。UUID的主要目的是解决网络系统中的唯一性问题,确保在网络中的任何地方都不会出现重复的...

    返回Long型UUid

    在Java编程中,UUID(Universally Unique Identifier)是一种标准的128位的唯一标识符,通常用于生成不可预测的全局唯一ID。然而,标准的UUID由32个16进制数字组成,形式上类似于“123e4567-e89b-12d3-a456-...

    javaScript动态随即生成UUID

    在IT领域,尤其是在Web开发中,唯一标识符(UUID)是一种极为重要的技术,它用于确保在分布式网络环境中数据对象的唯一性。JavaScript作为一种广泛应用于Web前端与后端开发的脚本语言,提供了多种方法来生成UUID,...

    jdk与javauuidgenerator生成uuid

    UUID,全称Universally Unique Identifier,是用于唯一标识信息的128位数字。在Java中,UUID提供了标准的方法来生成全局唯一的标识符。UUID主要由三部分组成:时间戳、随机数和节点ID,这确保了其在全球范围内的唯一...

    uuid.zip_uuid

    UUID,全称Universally Unique Identifier,是用于唯一标识信息的128位数字。在IT领域,UUID扮演着至关重要的角色,特别是在分布式系统和数据库设计中。UUID生成器是用来创建这些独特标识的工具,它确保生成的每个ID...

    javascript生成uuid的js库文件

    UUID(Universally Unique Identifier)是用于唯一标识信息的一种标准格式,通常由32个十六进制数字组成,分为五组,用短横线分隔。在JavaScript中,生成UUID的需求时常出现,例如在生成临时ID、数据库记录的主键...

    通过NDK获得UUID

    标题"通过NDK获得UUID"和描述涉及到利用Native Development Kit (NDK) 在Android系统底层获取UUID,以及通过Java层获取Android的唯一标识码。NDK允许开发者用C/C++编写部分应用,从而提高性能,特别是对于计算密集型...

    uuid-1.6.2.tar.gz

    UUID,全称Universally Unique Identifier,是用于唯一标识网络中的对象的一种标识符。在数据库系统中,UUID常常被用来创建全局唯一的序列号,避免不同系统间的冲突。在PostgreSQL数据库中,uuid-ossp扩展提供了生成...

    uuid.exe windows uuid 命令

    uuid 默认生成带横线的 uuid -s 生成不带横线的uuid

    fast-uuid用于快速高效地解析和编写UUID的Java库

    UUID,全称Universally Unique Identifier,是一种为分布式系统生成全局唯一标识符的机制。在Java中,虽然标准库提供有`java.util.UUID`类来生成和处理UUID,但其性能并非最优,特别是在大规模生成和解析时。为了...

    UUID随机数字

    利用UUID生成完全不重复的数字 package com.example.uuid; import java.util.UUID; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View....

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

    ### UUID SPEC (Universally Unique Identifier (UUID) URN Namespace) #### 概述 UUID(Universally Unique Identifier),即通用唯一标识符,是一种128位的数字标识符,旨在跨空间和时间保证其唯一性。UUID最初...

Global site tag (gtag.js) - Google Analytics