Writer:BYSocket(泥沙砖瓦浆木匠)

Reprint it anywhere u want

需求

项目在设计表的时候,要处理并发多的一些数据,类似订单号不能重复,要保持唯一。原本以为来个时间戳,精确到毫秒应该不错了。后来觉得是错了,测试环境下很多一样的ID,不能达到唯一标识。

UUID

JDK API 是这么说的:
“表示通用唯一标识符 (UUID) 的类。 UUID 表示一个 128 位的值。”

详细的说就是:
“UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部份。UUID 的目的,是让分布式系统中的所有元素,都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定。如此一来,每个人都可以建立不与其它人冲突的 UUID。在这样的情况下,就不需考虑数据库建立时的名称重复问题。目前最广泛应用的 UUID,即是微软的 Microsoft’s Globally Unique Identifiers (GUIDs),而其他重要的应用,则有 Linux ext2/ext3 档案系统、LUKS 加密分割区、GNOME、KDE、Mac OS X 等等。”

UUID由以下几部分的组合:   

(1)当前日期和时间,UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同。   

(2)时钟序列   

(3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。

代码实现

很方便的,直接调用UUID的randomUUID方法,即可获得UUID对象,然后就获取了这个唯一标识码。

1
2
3
4
5
public static void main(String[] args)
{
    UUID uuid = UUID.randomUUID();
    System.out.println(uuid);
}

RUN一下,可以从控制台发现:

1
<font size="4">     65752c66-bd3f-4564-b8d6-92d66796e007</font>

这就是唯一标志码。但显得冗长,不够友好。如果在URL后面做参数,更加不够友好。还有存储一个UUID要花费更多的空间。获取的时间倒不必考虑太多。

获取八位UUID标识码

仿着网上大牛代码,直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<font size="4">public static String[] chars = new String[]
        {
            "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
            "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
            "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V","W", "X", "Y", "Z"
        }; 
 
 
    public static String getShortUuid()
    
        StringBuffer stringBuffer = new StringBuffer(); 
        String uuid = UUID.randomUUID().toString().replace("-", ""); 
        for (int i = 0; i < 8; i++)
        
            String str      uuid.substring(i * 4, i * 4 + 4); 
            int strInteger  = Integer.parseInt(str, 16); 
            stringBuffer.append(chars[strInteger % 0x3E]); 
        
         
        return stringBuffer.toString(); 
    }  </font>

用300个测试下,没问题。足够用了,能适应环境场景即可。

Writer:BYSocket(泥沙砖瓦浆木匠)

Reprint it anywhere u want

JAVA UUID 生成唯一标识的更多相关文章

  1. JAVA UUID 生成唯一密钥(可随机选择长度)

    /**     * 获得指定数目的UUID      * @param number int 需要获得的UUID数量      * @return String[] UUID数组      */    ...

  2. Python标准库 -- UUID模块(生成唯一标识)

    UUID是什么: UUID: 通用唯一标识符 ( Universally Unique Identifier ),对于所有的UUID它可以保证在空间和时间上的唯一性,也称为GUID,全称为: UUID ...

  3. JAVA UUID 生成

    UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成UUID的API.UUID按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址.纳秒级时间.芯 ...

  4. 4:JAVA UUID 生成

    GUID是一个128位长的数字,一般用16进制表示.算法的核心思想是结合机器的网卡.当地时间.一个随即数来生成GUID.从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义 ...

  5. Java UUID 生成(转载)

    来自:http://www.cnblogs.com/jdonson/archive/2009/07/22/1528466.html 基本原理:GUID是一个128位长的数字,一般用16进制表示.算法的 ...

  6. Java中生成唯一标识符的方法(Day_48)

    有时候业务需要生成唯一标识符,但又不能依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,此时我们就需要用程序来生成一个唯一的全局ID. UUID UUID是指在一台机器上 ...

  7. Java中生成唯一标识符的方法

    有时候业务需要生成唯一标识符,但又不能依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,此时我们就需要用程序来生成一个唯一的全局ID. UUID UUID是指在一台机器上 ...

  8. 用ThreadLocal为线程生成唯一标识及实现原理

    1.在多线程编程中,有时候需要自动为每个启动的线程生成一个唯一标识,这个时候,通过一个ThreadLocal变量来保存每个线程的标识是最有效.最方便的方式了. 2.ThreadLocal 实例通常是类 ...

  9. Mysql使用Java UUID作为唯一值时使用前缀索引测试

    Mysql可以使用字符串前缀 作为索引 以节约空间. 下面我们以 Java的UUID 生成的 32位(移除UUID中的 中划线)字符串 来做一下 测试. 表结构: CREATE TABLE `test ...

随机推荐

  1. 20175316 盛茂淞 MyCP(课下作业,必做)

    题目要求 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为 ...

  2. win 10 的wordcloud的安装

    这两天为了安装wordcloud库可谓是“一把辛酸”,各种出错 jieba什么就不说了,安装和使用都很简单只需要一句代码就可以实现了,而wordcloud在安装之前,本以为也像jieba那样的简单,但 ...

  3. hprose for php

    1.客户端和服务器简单DEMO 通过工厂方法 create 创建客户端 $client = \Hprose\Client::create($uriList = null[, $async = true ...

  4. 关于this的指向

    1.谁调用该函数this指向就指向谁 2.回调函数中this的指向永远都指向window 3.箭头函数指向最近的作用域,箭头函数本身是没有this的指向 4.定时器永远指向window 5.严格模式下 ...

  5. MySQL PROFILE 跟踪语句各阶段性能开销

    PROFILE  可以跟踪查询语句各个阶段 Time,IO,CPU,MEMORY 等资源使用情况,比较详细.所以系统一般不会记录太多.启用是全局的,所以每个连接都保持语句的资源使用情况. 查看 PRO ...

  6. linux 挂载ntfs格式的硬盘

    一.安装ntfs 1.下载 sudo wget  https://tuxera.com/opensource/ntfs-3g_ntfsprogs-2017.3.23.tgz 2.解压 sudo tar ...

  7. Maven学习笔记5:Maven属性、profile和资源过滤

    Maven的六类属性 内置属性 主要有两个常用内置属性:${basedir}项目的根目录(包含pom.xml文件的目录),${version}项目版本 POM属性 用户可以使用该属性引用POM文件中对 ...

  8. NotePad++ 添加HEX-Editor插件

    步骤: 一.下载插件 https://github.com/chcg/NPP_HexEdit/releases 二.选择插件版本 Notepad 官网客服提示:32bit Notepad++可以使用常 ...

  9. 第四次scrum冲刺

    一.第四次Scrum任务 继续上次的任务,完成校园服务中的成绩查询,失物招领,长大集市的功能. 小组的地址链接:https://github.com/Weifeng513/-1/tree/master ...

  10. 两台Linux机器传送文件

    https://www.cnblogs.com/lianrenjujishou/p/5458206.html