Java编程:随机生成数字串
2018-09-23 00:00
676 查看
介绍两种随机生成数字串的方法,该方法生成的随机串,小概率情况下会产生重复值,因此该方法只可用于生成验证码,不可以用于生成数字串类型的主键。还有一篇关于生成不重复的数字串的文章。如有不正之处,欢迎批评指正。
方法一:效率高,但是最大可以生成 19 位数字串
/**
* 随机生产 factor 位的数字,最大不超过 19位,因为long的最大值为19位
* @param factor
* @return
*/
public static Long randomNum(int factor){
return new Double((Math.random() + 1) * Math.pow(10, factor - 1)).longValue();
}
方法二:效率低于方法一,但是它可以生成任意位数的数字串,同时可以扩展为生成数组字母串,见方法三
public static String characters = "0123456789";
public static String randomNum1(int factor){
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < factor; i++) {
// nextInt(10) = [0, 10)
sb.append(characters.charAt(random.nextInt(10)));
}
return sb.toString();
}
对方法一、方法二做了简单的测试,结果如下:方法一的效率大致为方法二的10倍,而且随着生成的字符串的长度的增加,两者的差距逐步加大。
随机生成 10 位数字串,生成 1000000 次耗时:
randomNum used 49 ms
randomNum1 used 307 ms
随机生成 19 位数字串,生成 1000000 次耗时:
randomNum used 49 ms
randomNum1 used 457 ms
随机生成 10 位数字串,生成 10000000 次耗时:
randomNum used 280 ms
randomNum1 used 2283 ms
随机生成 19 位数字串,生成 10000000 次耗时:
randomNum used 309 ms
randomNum1 used 3675 ms
方法三:生成指定位数的数字字母串
public static String characters1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String randomStr(int factor){
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < factor; i++) {
// nextInt(10) = [0, 10)
sb.append(characters1.charAt(random.nextInt(36)));
}
return sb.toString();
}
方法一:效率高,但是最大可以生成 19 位数字串
/**
* 随机生产 factor 位的数字,最大不超过 19位,因为long的最大值为19位
* @param factor
* @return
*/
public static Long randomNum(int factor){
return new Double((Math.random() + 1) * Math.pow(10, factor - 1)).longValue();
}
方法二:效率低于方法一,但是它可以生成任意位数的数字串,同时可以扩展为生成数组字母串,见方法三
public static String characters = "0123456789";
public static String randomNum1(int factor){
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < factor; i++) {
// nextInt(10) = [0, 10)
sb.append(characters.charAt(random.nextInt(10)));
}
return sb.toString();
}
对方法一、方法二做了简单的测试,结果如下:方法一的效率大致为方法二的10倍,而且随着生成的字符串的长度的增加,两者的差距逐步加大。
随机生成 10 位数字串,生成 1000000 次耗时:
randomNum used 49 ms
randomNum1 used 307 ms
随机生成 19 位数字串,生成 1000000 次耗时:
randomNum used 49 ms
randomNum1 used 457 ms
随机生成 10 位数字串,生成 10000000 次耗时:
randomNum used 280 ms
randomNum1 used 2283 ms
随机生成 19 位数字串,生成 10000000 次耗时:
randomNum used 309 ms
randomNum1 used 3675 ms
方法三:生成指定位数的数字字母串
public static String characters1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String randomStr(int factor){
StringBuilder sb = new StringBuilder();
Random random = new Random();
for (int i = 0; i < factor; i++) {
// nextInt(10) = [0, 10)
sb.append(characters1.charAt(random.nextInt(36)));
}
return sb.toString();
}
相关文章推荐
- Java基础编程1—随机生成字母数字组合
- java中生成不重复随机的数字
- java生成随机数字和字母组合
- [转]java生成随机数字和字母组合
- JAVA生成n位随机字符串,数字+英文字母+标点符号
- java随机生成一个6/8/12位密码,数字加字母的密码
- Java生成随机码(兑换码),带大小字母、小写字母、数字。
- java中生成不重复随机的数字
- java生成任意随机值,字符,数字,其它的都有你来
- Java随机生成定长纯数字或数字字母混合数
- Java随机生成数字的方法
- Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例
- java验证码中的数字、字母、汉字如何随机生成
- Java随机生成数字的方法
- Java随机生成字母数字组合的验证码
- Java web 开发: 随机生成验证码,支持大小写字母、数字;随机字体
- java经典算法_033随机生成不重复的数字
- 使用java.lang.Math 生成随机数字
- JAVA生成字符数字交替的随机密码
- Java数字格式化,随机生成数字