两种方法利用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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值