前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >随机ID生成的几种 方式整理(现阶段基础)

随机ID生成的几种 方式整理(现阶段基础)

作者头像
默 语
发布2024-11-20 11:17:46
发布2024-11-20 11:17:46
44300
代码可运行
举报
文章被收录于专栏:JAVAJAVA
运行总次数:0
代码可运行
随机ID生成的几种 方式整理(现阶段基础)
  1. UUID (Universally Unique Identifier): UUID是一个128位的全局唯一标识符,通常以32个十六进制数字表示。它可以通过Java的java.util.UUID类生成,具有非常低的碰撞风险。
  2. 随机数生成: 使用随机数生成器生成随机的整数、字符串或其他数据,可以通过Java的java.util.Random类来实现。但需要注意的是,完全随机的数列可能在长时间运行中产生重复。
  3. 时间戳与随机数结合: 将当前时间戳与随机数结合,可以生成相对短期内的唯一ID。需要注意的是,如果在同一毫秒内生成多个ID,可能会导致碰撞。
  4. Snowflake算法: Snowflake是Twitter开源的分布式ID生成算法,通过将时间戳、机器ID和序列号组合生成唯一ID。它在分布式系统中使用较为广泛,可以防止重复和碰撞。
  5. 数据库自增ID: 在数据库中使用自增字段作为唯一ID,数据库会负责维护ID的递增,并确保唯一性。这在关系型数据库中很常见。
  6. 哈希函数: 将某个数据(如用户名、时间戳等)通过哈希函数处理,生成唯一的哈希值作为ID。但是需要注意哈希碰撞的可能性。
  7. GUID (Globally Unique Identifier): 类似于UUID,GUID也是用于生成全球唯一标识符的算法。在Windows环境中较常见。
  8. KGS (Key Generation Service): 通过专门的服务生成唯一ID,如Twitter的Snowflake、Google的Flake等。
  9. 自定义算法: 您也可以基于特定需求设计自己的ID生成算法,结合时间戳、机器信息、随机数等元素。

博主 默语带您 Go to New World.个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭 《MYSQL从入门到精通》数据库是开发者必会基础之一~ 🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨

代码和注释都有大家根据自己需求自取即可;

代码语言:javascript
代码运行次数:0
复制
package com.example.democrud.democurd.uuid;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

public class uuid {

    public static void main(String[] args) {


        System.out.println("----------------------random随机数--------------------");

         //random随机数
         Random random = new Random();
         //取(10000-99999)的数,random出来0-89999的数,再加10000就达到效果。
         //3个8 代表获取的随机的值 是3位数的
         int id=random.nextInt(8888)+1000;
         System.out.println("random随机数==>"+id);


        UUID uuid = UUID.randomUUID();
        System.out.println("原生uuid==>"+uuid);
        System.out.println("----------------------UUID随机数 常用--------------------");
        String str = uuid.toString();
        String uuidStr = str.replace("-", "");
        System.out.println(uuidStr);

        System.out.println("----------------------UUID随机数 根据一个符合UUID格式的字符串获取--------------------");
        UUID uuid1 = UUID.fromString("095c64fe-c5bf-11ea-aec6-a402b9e2b04d");
        System.out.println(uuid1);

        System.out.println("----------------------UUID随机数 根据字符串获取--------------------");
        UUID uuid2 = UUID.nameUUIDFromBytes("身份证号码".getBytes());
        System.out.println(uuid2);
        UUID uuid21 = UUID.nameUUIDFromBytes("身份证号码".getBytes());
        System.out.println(uuid21);
        System.out.println("通过demo得出相同字符得除的加密是相同的");

        UUID uuid3 = UUID.nameUUIDFromBytes("身份证号码11".getBytes());
        System.out.println(uuid3);



        System.out.println("----------------------生成随机ID--------------------");
         //生成6位随机数字
        System.out.println((int)((Math.random()*9+1)*100000));
        //生成5位随机数字
        System.out.println((int)((Math.random()*9+1)*10000));
        //生成4位随机数字
        System.out.println((int)((Math.random()*9+1)*1000));
        //生成3位随机数字
        System.out.println((int)((Math.random()*9+1)*100));
        //生成2位随机数字
        System.out.println((int)((Math.random()*9+1)*10));
        //生成1位随机数字
        System.out.println((int)((Math.random()*9+1)));



        System.out.println("----------------------生成时间UUID随机数--------------------");
        Date date=new Date();
        DateFormat format = new SimpleDateFormat("yyyyMMdd");
        String time = format.format(date);
        int hashCodeV = UUID.randomUUID().toString().hashCode();
        if (hashCodeV < 0) {//有可能是负数
            hashCodeV = -hashCodeV;
        }
        // 0 代表前面补充0
        // 11 代表长度为11 时间后面值的长度,他的长度的增加与减少是靠增加0 与去掉0来处理的
        // d 代表参数为正数型
        System.out.println("当前时间年月日"+time);
        System.out.println(time + String.format("%011d", hashCodeV));
        // 13 代表长度为13 不足的需要增加0补充
        System.out.println(time + String.format("%013d", hashCodeV));
    }

}

运行结果如下:

代码语言:javascript
代码运行次数:0
复制
----------------------random随机数--------------------
random随机数==>1289
原生uuid==>97bc24f0-d12e-4184-b970-46a34dd53f06
----------------------UUID随机数 常用--------------------
97bc24f0d12e4184b97046a34dd53f06
----------------------UUID随机数 根据一个符合UUID格式的字符串获取--------------------
095c64fe-c5bf-11ea-aec6-a402b9e2b04d
----------------------UUID随机数 根据字符串获取--------------------
84e0cb5d-57ed-395b-8cc0-4b4ab9a7997b
84e0cb5d-57ed-395b-8cc0-4b4ab9a7997b
通过demo得出相同字符得除的加密是相同的
4b5b1bc6-86d1-390e-af96-0acd922f308f
----------------------生成随机ID--------------------
112926
52122
9081
109
43
1
----------------------生成时间UUID随机数--------------------
当前时间年月日20230202
2023020200914093716
202302020000914093716

不足之处多多谅解;有其他更好的方式,欢迎留言;

代码和注释都有大家根据自己需求自取即可;

代码语言:javascript
代码运行次数:0
复制
package com.example.democrud.democurd.uuid;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.UUID;

public class uuid {

    public static void main(String[] args) {


        System.out.println("----------------------random随机数--------------------");

         //random随机数
         Random random = new Random();
         //取(10000-99999)的数,random出来0-89999的数,再加10000就达到效果。
         //3个8 代表获取的随机的值 是3位数的
         int id=random.nextInt(8888)+1000;
         System.out.println("random随机数==>"+id);


        UUID uuid = UUID.randomUUID();
        System.out.println("原生uuid==>"+uuid);
        System.out.println("----------------------UUID随机数 常用--------------------");
        String str = uuid.toString();
        String uuidStr = str.replace("-", "");
        System.out.println(uuidStr);

        System.out.println("----------------------UUID随机数 根据一个符合UUID格式的字符串获取--------------------");
        UUID uuid1 = UUID.fromString("095c64fe-c5bf-11ea-aec6-a402b9e2b04d");
        System.out.println(uuid1);

        System.out.println("----------------------UUID随机数 根据字符串获取--------------------");
        UUID uuid2 = UUID.nameUUIDFromBytes("身份证号码".getBytes());
        System.out.println(uuid2);
        UUID uuid21 = UUID.nameUUIDFromBytes("身份证号码".getBytes());
        System.out.println(uuid21);
        System.out.println("通过demo得出相同字符得除的加密是相同的");

        UUID uuid3 = UUID.nameUUIDFromBytes("身份证号码11".getBytes());
        System.out.println(uuid3);



        System.out.println("----------------------生成随机ID--------------------");
         //生成6位随机数字
        System.out.println((int)((Math.random()*9+1)*100000));
        //生成5位随机数字
        System.out.println((int)((Math.random()*9+1)*10000));
        //生成4位随机数字
        System.out.println((int)((Math.random()*9+1)*1000));
        //生成3位随机数字
        System.out.println((int)((Math.random()*9+1)*100));
        //生成2位随机数字
        System.out.println((int)((Math.random()*9+1)*10));
        //生成1位随机数字
        System.out.println((int)((Math.random()*9+1)));



        System.out.println("----------------------生成时间UUID随机数--------------------");
        Date date=new Date();
        DateFormat format = new SimpleDateFormat("yyyyMMdd");
        String time = format.format(date);
        int hashCodeV = UUID.randomUUID().toString().hashCode();
        if (hashCodeV < 0) {//有可能是负数
            hashCodeV = -hashCodeV;
        }
        // 0 代表前面补充0
        // 11 代表长度为11 时间后面值的长度,他的长度的增加与减少是靠增加0 与去掉0来处理的
        // d 代表参数为正数型
        System.out.println("当前时间年月日"+time);
        System.out.println(time + String.format("%011d", hashCodeV));
        // 13 代表长度为13 不足的需要增加0补充
        System.out.println(time + String.format("%013d", hashCodeV));
    }










}

运行结果如下:

代码语言:javascript
代码运行次数:0
复制
----------------------random随机数--------------------
random随机数==>1289
原生uuid==>97bc24f0-d12e-4184-b970-46a34dd53f06
----------------------UUID随机数 常用--------------------
97bc24f0d12e4184b97046a34dd53f06
----------------------UUID随机数 根据一个符合UUID格式的字符串获取--------------------
095c64fe-c5bf-11ea-aec6-a402b9e2b04d
----------------------UUID随机数 根据字符串获取--------------------
84e0cb5d-57ed-395b-8cc0-4b4ab9a7997b
84e0cb5d-57ed-395b-8cc0-4b4ab9a7997b
通过demo得出相同字符得除的加密是相同的
4b5b1bc6-86d1-390e-af96-0acd922f308f
----------------------生成随机ID--------------------
112926
52122
9081
109
43
1
----------------------生成时间UUID随机数--------------------
当前时间年月日20230202
2023020200914093716
202302020000914093716

不足之处多多谅解;有其他更好的方式,欢迎留言;

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 随机ID生成的几种 方式整理(现阶段基础)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档