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

两种方法利用Java生成唯一ID,取当前时间与字母随机组合,并发少的情况足以胜任

 
阅读更多
自己写的,利用当前的时间字符串与字母的随机组合成16位ID。如果并发不是太多,完成可以胜任。就算并发很多也不容易重复
import java.util.Random;

public class UniqueId{
	public static void main(String[] args) {
		Long h = System.currentTimeMillis();//获得当前时间的毫秒数
		String str = h.toString();//转化为字符串
		int i = str.length();
		int j = i-7;//用来取此字符串的末尾7位数,因为前面的数是年份什么的基本不变,我们只用后面的7位
		String body = str.substring(j, j+3);//取此字符串的末尾7位数的前3位
		String tail = str.substring(j+3,i);//取此字符串的末尾7位数的后4位
		//将26位字母做成数组,你也可以添加一些其它的可用字符
		String [] arr = {"a", "b", "c", "d","e", "f", "g", 
					"h","i","g", "k", "l","m", "n", 
					"o", "p","q", "r", "s", "t",
					"u", "v", "w", "x","y", "z"};

		String[] target = new String[3];
		//将字母数组随机取3个字母组成一个字符串,一共组成3个字符串放到目标数组target中
			for(int s = 0; s<3;s++){
				Random random = new Random();
		         int a = random.nextInt(arr.length);
		         int b = random.nextInt(arr.length);
		         int c = random.nextInt(arr.length);
		         target[s] = arr[a]+arr[b]+arr[c];
		       }
		System.out.println(target[0]+body+target[1]+tail+target[2]);//将3个字母段与两个数字段组合输出随机ID
	}

}

后来觉得并不是太好就又写了一个随机组合16位ID。貌似下面这个更好些

import java.util.Random;

public class SeeId{
	public static void main(String[] args) {
		Long h = System.currentTimeMillis();//获得当前时间的毫秒数
		String str = h.toString();//转化为字符串
		int i = str.length();//总长度
		int j = i-7;//用来取此字符串的末尾7位数,因为前面的数是年份什么的基本不变,我们只用后面的7位
		char[] charArray = str.substring(j,i).toCharArray();//将取到的7位数做成数组
		//将26位字母做成数组
		String [] arr = {"a", "b", "c", "d","e", "f", "g", 
					"h","i","g", "k", "l","m", "n", 
					"o", "p","q", "r", "s", "t",
					"u", "v", "w", "x","y", "z"};
		//将字母数组随机取3个字母组成一个字符串,一共组成3个字符串放到目标数组target中
		StringBuffer uniqueId = new StringBuffer();//用于生成唯一ID
		Random random = new Random();//用于取随机数和布尔值
		boolean insertflag = true;//用来控制是插入数字还是字母
		int timecount = 0;//用来控制插入数字的长度,别超过7
		int zimucount = 0;//用来控制插入字母的总数,别超过9 7个数字加上9个字母组合
		boolean timeflag = true;//判断时间是否插入了7位,默认true为不满
		boolean zimuflag = true;//判断字幕是否插入了9位,默认true为不满
		while (zimucount<9||timecount<7) {//开始组合
			if(insertflag){//默认为ture,先加字母,你也可以先加数字
				if (zimucount<9) {//如果uniqueId插入的字幕总数没超过9个
					uniqueId.append(arr[random.nextInt(26)]);//则在字母数组中随机选一个插入
					zimucount++;//对应加1
					if(timeflag){//如果时间没有插入满7位则重新抓阄看插入时间还是数字
					insertflag = random.nextBoolean();//重置flag,随机产生false还是true
					}//如果timeflag=false,时间数字已经插入满7位,则不抓阄了。保持insertflag=true
				}else{//如果已经加够了否则不操作,
					zimuflag = false;//将zimuflag变为已加够,false
					insertflag = false;//将插入权判断给时间数字
				}
			}else{
				if (timecount<7) {//先加时间转化成的数组,你也可以先加字母
					//此处取时间数字数组不能用random随机取。那样用时间来生成数组就没意义了
					uniqueId.append(charArray[timecount]);//不可打乱顺序
					timecount++;//对应加1
					if(zimuflag){//如果字母没有插入满9位则重新抓阄看插入时间还是数字
						insertflag = random.nextBoolean();
					}//如果zimuflag=false,字幕已经插入满9位,则不抓阄了。保持insertflag=false
				}else{
					timeflag = false;//将timeflag变为已加够,false
					insertflag = true;//将插入权判断给字母
				}
			}
		}
		System.out.println(uniqueId.toString());//得到最终id
	}
}

也算抛砖引玉,有更好的方法欢迎提出。感觉已经满够用的了微笑

Java学习交流群: 2177712

分享到:
评论

相关推荐

    利用时间生成8位不重复数

    标题提到的“利用时间生成8位不重复数”就是这样一个策略,它基于当前时间的时间戳来生成特定长度的不重复数字。 时间戳是一个非常有效的资源,因为它代表了从1970年1月1日00:00:00 UTC到当前时刻的总秒数。由于每...

    java生成唯一id(uuid)(不依赖jdk5,自己实现的)

    在Java编程中,生成唯一的ID(Universal Unique Identifier,UUID)是一项常见的需求,特别是在数据库记录、分布式系统中的对象标识等方面。UUID是一种128位的数字,通常以32个字符的16进制形式表示,确保在全球范围...

    java 获取分布式唯一ID.雪花ID

    在Java开发中,生成分布式唯一ID是常见的需求,特别是在大数据量和高并发的场景下,保证每个记录的ID独特性至关重要。雪花ID(Snowflake ID)是一种被广泛采用的解决方案,由Twitter开源,其设计目标就是生成全局...

    测试多种方法生成唯一性随机码Demo

    利用CPU ID、MAC地址等硬件信息,结合随机数生成器,可以创建与特定设备关联的唯一编码。但这可能引发隐私问题,不适用于所有场景。 在测试这些方法时,需要关注以下指标: - **唯一性**:确保在所有测试条件下,...

    java自动生成id策略

    "java自动生成id策略"指的是设计并实现一种机制,确保在多线程环境下能够高效、唯一地生成ID。这里我们将详细探讨这个主题,以及如何根据描述实现这样的策略。 首先,ID的生成通常要求满足以下条件: 1. 唯一性:...

    官方Java端口的Sqids生成短唯一的id从数字.zip

    Sqids(Short Unique IDs from Sequences)是一种生成短而唯一ID的系统,它最初由Twitter开发,用于在大规模分布式环境中生成具有低延迟和高吞吐量的唯一标识符。这个官方Java端口允许开发者在Java应用程序中利用...

    Springboot唯一编号整合,vesta全局唯一id生成器

    SpringBoot作为一个轻量级的Java开发框架,广泛应用于微服务架构,而Vesta ID Generator则是一个专门用于生成全局唯一ID的工具,尤其适合在高并发、高可用的环境中使用。本篇将详细讲解如何在SpringBoot项目中整合...

    java 分布式 代码生成器 唯一ID

    在Java分布式环境中,生成唯一的ID(唯一标识符)是一个至关重要的任务,特别是在高并发和大数据量的场景下。这样的需求通常出现在数据库主键、订单号、用户唯一标识等业务场景中。下面我们将深入探讨Java分布式代码...

    C#根据时间产生ID编号

    在给定的代码示例中,展示了如何在C#中利用当前时间来生成一个带有随机后缀的ID编号。 #### 代码分析 ```csharp private string Get_BillMain_Id() { Random ra = new Random(); string id = string.Format("{0:...

    java快速ID自增器

    在Java开发中,高效地生成唯一且自增的ID是许多系统设计的关键部分。"Java快速ID自增器"就是为了解决这个问题而设计的一种工具或解决方案。它旨在提供一个高性能、线程安全的方式来生成自增ID,尤其适用于那些需要...

    Java中生成唯一ID的方法示例

    在本篇文章中,我们将介绍两种常见的生成唯一ID的方法:UUID和随机数的哈希值。 UUID UUID(Universally Unique Identifier,通用唯一识别码)是一种生成唯一ID的简单方法。UUID来自OSF(Open Software Foundation...

    Java系统的高并发解决方法详解

    Java系统的高并发解决方法详解 ...Java系统的高并发解决方法可以通过静态化、图片服务器分离、数据库集群和库表散列、缓存等多种方法来实现,选择哪种方法需要根据实际情况进行选择和组合,以提高系统的性能和扩展性。

    JAVA版本的生成唯一编号

    /** * 获得序列号,同时更新持久化存储中的序列 * @param current 当前的日期 * @param start 初始化的序号 * @return 所获得新的序列号 */ protected abstract int getOrUpdateNumber(Date current, int start);

    java数据库唯一id生成工具类

    Java数据库唯一ID生成工具类是指能够生成唯一的ID号码的Java工具类,主要用于解决数据库中ID的唯一性问题。本工具类通过使用JdbcTemplate对数据库进行操作,生成的ID号码具有唯一性和随机性。 1. 工具类的组成 ...

    java随机生成10位数的字符串ID

    Java随机生成10位数字符串ID是Java编程中的一种常见需求,特别是在项目中需要唯一标识符的情况下。今天,我们将详细介绍Java随机生成10位数字符串ID的方法,并提供相应的代码实现。 什么是随机生成10位数字符串ID?...

    JAVA生成订单号(日期+流水号)

    本文将详细介绍一个通过Java语言实现的简单而有效的订单号生成策略——基于日期与流水号的组合。 #### 二、日期与时间处理 1. **日期时间格式化**:代码中使用`SimpleDateFormat`类来格式化当前时间。例如: ```...

    javaID生成器javaID生成器

    ### Java ID生成器详解 #### 一、引言 在软件开发过程中,特别是在数据库操作时,经常需要为每个新创建的记录分配一个唯一的标识符(ID)。为了满足这一需求,Java 开发者们通常会设计一种高效且可靠的 ID 生成...

    java随机产生四位验证码(相邻码不重复)两种算法实现

    在Java编程中,生成验证码是一种常见的需求,通常用于身份验证或防止机器人自动操作。验证码的目的是确保用户是人类,而不是机器。在这个问题中,我们关注的是如何生成四位字符且无重复的验证码,以及如何进一步确保...

    mysql雪花算法生成唯一整型ID主键的实现方法

    雪花算法是一种分布式ID生成策略,由Twitter开源,其设计目标是在分布式系统中生成具有全局唯一性、有序性和高并发性的ID。在MySQL中实现雪花算法,主要是通过自定义函数来模拟这个过程。 首先,我们需要创建一个名...

    生成并发唯一性流水号的解决方案.doc

    在现代信息技术的应用场景中,生成并发唯一性流水号的需求日益凸显。特别是在金融、电商和物流等领域,确保流水号在高并发情况下的唯一性至关重要,以避免数据错乱和业务处理上的混乱。本文将详细介绍一个生成并发...

Global site tag (gtag.js) - Google Analytics