UUID分析

  UUID:通用唯一识别码 (Universally Unique Identifier),是一个软件建构的标准,是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算(Distributed Computing Environment, DCE) 领域的一部分。

  UUID 目的是让分布式系统中的所有元素,都能有唯一的辨识,而不需要透过中央控制端来做辨识资讯的指定。

  UUID是指在一台机器上生成的数字,保证对在同一时空中的所有机器都是唯一的。通常平台会提供生成的API。按照OSF制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字

  UUID由以下几部分的组合:
  (1)当前日期和时间,UUID的第一个部分与时间有关,如果在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。
  (2)时钟序列
  (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
  UUID的唯一缺陷在于生成的结果串会比较长。关于UUID这个标准使用最普遍的是微软的GUID(Globals Unique Identifiers)。在ColdFusion中可以用CreateUUID()函数很简单地生成UUID,其格式为:xxxxxxxx-xxxx- xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。而标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。
  应用
  UUID的标准型式包含32个16进位数字,以连字号分为五段,形式为8-4-4-4-12的32个字符,加上“-”一共是36位,所以可以先取出uuid,再把“-”去掉
      <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
import java.util.UUID;
import org.apache.commons.lang3.RandomStringUtils;

public class RandomUtils {
    public RandomUtils() {
    }

    public static String generateTicket() {
        String ticket = UUID.randomUUID().toString();
        return ticket.replaceAll("-", "");
    }

    public static String generateRandomString(int count) {
        return RandomStringUtils.random(count, true, true);
    }

    public static String generateRandomNum(int count) {
        return RandomStringUtils.random(count, false, true);
    }

    public static String generateRandomFileName() {
        return String.join("", generateTicket(), generateRandomString(6));
    }
}

  UUID由32 个字母数字字符组成(没有包括连字符),每一个字符是一个16进制的数字(0-f)。UUID 有一定的结构:

注意:16进制用 半个字节 表示,1个字节等于两个半字节,1个字节等于8位,半字节等于4个位。

  UUID产生方式:

  “版本1” UUID 是根据时间和节点 ID(通常是MAC地址)生成;

  “版本2” UUID是根据标识符(通常是组或用户ID)、时间和节点ID生成;

  “版本3” 和 “版本5” 确定性UUID 通过散列 (hashing) 名字空间 (namespace) 标识符和名称生成;

  “版本4” UUID 使用随机性或伪随机性生成。

  1、long转16进制

long x=15L;
String temp=Long.toHexString(x);

  2、byte数组转16进制

byte[] randomBytes={15,14,12,11,-6};
System.out.println(DatatypeConverter.printHexBinary(randomBytes));

  

posted on 2019-12-15 15:49  溪水静幽  阅读(517)  评论(0)    收藏  举报