两种方法利用Java生成唯一ID,取当前时间与字母随机组合,并发少的情况足以胜任
2012-12-06 13:54
916 查看
自己写的,利用当前的时间字符串与字母的随机组合成16位ID。如果并发不是太多,完成可以胜任。就算并发很多也不容易重复
后来觉得并不是太好就又写了一个随机组合16位ID。貌似下面这个更好些
也算抛砖引玉,有更好的方法欢迎提出。感觉已经满够用的了
[b]Java学习交流群: 2177712
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+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 } }
也算抛砖引玉,有更好的方法欢迎提出。感觉已经满够用的了
[b]Java学习交流群: 2177712
相关文章推荐
- java利用时间格式生成唯一文件名的方法
- PHP uniqid()函数可用于生成不重复的唯一标识符,该函数基于微秒级当前时间戳。在高并发或者间隔时长极短(如循环代码)的情况下,会出现大量重复数据。即使使用了第二个参数,也会重复,最好的方案是结
- java 使用UUID生成19随机单号 纯数字,数字+字母唯一不重复单号
- JAVA中获取当前系统时间的两种方法
- java生成随机数字和字母组合
- 利用Java.util.UUID来生成唯一ID(用来做数据库主键好用)
- java根据时间生成唯一ID
- php随机生成数字字母组合的方法
- java生成随机数字和字母组合
- 高并发、分布式交易场景下唯一ID生成方法
- 在高并发分布式情况下生成唯一标识id
- java生成随机数字和字母组合
- 流水号生成方法——按照时间格式生成的有序唯一编码(支持并发)
- Hive中生成随机唯一标识ID的方法
- java生成随机数字和字母组合
- java随机生成时间字符串的方法
- java生成随机数字和字母组合(自定义长度)
- 在Java中用两种方法打印当前的时间,第一种方法是格式化法,第二种方法是日历法。
- Java集群环境下全局唯一流水ID生成方法之一
- java 生成随机数字+字母组合 和字母组合