Java提供的随机数工具,或者第三方提供的随机数工具,都不能满足我的需求:产生指定位数且大于0的整数(可以做为ID使用)。
在使用commons-lang的RandomStringUtils类时,有一个方法引起了我的注意RandomStringUtils.randomNumeric(int count),该方法返回指定数目的随机数字串,如果把返回的数字串解析成数字,不就可以产生随机数了么~~~~
按照上面的思路,做了一下封装,代码如下:
package org.lazyman.util
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.math.RandomUtils;
/**
* @author yihuan
* @version RandomNumberUtil.java 2010-1-14 上午11:39:20
*/
public class RandomNumberUtil {
private static final int[] prefix = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
/**
* 随机产生最大为18位的long型数据(long型数据的最大值是9223372036854775807,共有19位)
*
* @param digit
* 用户指定随机数据的位数
*/
public static long randomLong(int digit) {
if (digit >= 19 || digit <= 0)
throw new IllegalArgumentException("digit should between 1 and 18(1<=digit<=18)");
String s = RandomStringUtils.randomNumeric(digit - 1);
return Long.parseLong(getPrefix() + s);
}
/**
* 随机产生在指定位数之间的long型数据,位数包括两边的值,minDigit<=maxDigit
*
* @param minDigit
* 用户指定随机数据的最小位数 minDigit>=1
* @param maxDigit
* 用户指定随机数据的最大位数 maxDigit<=18
*/
public static long randomLong(int minDigit, int maxDigit) {
if (minDigit > maxDigit) {
throw new IllegalArgumentException("minDigit > maxDigit");
}
if (minDigit <= 0 || maxDigit >= 19) {
throw new IllegalArgumentException("minDigit <=0 || maxDigit>=19");
}
return randomLong(minDigit + getDigit(maxDigit - minDigit));
}
private static int getDigit(int max) {
return RandomUtils.nextInt(max + 1);
}
/**
* 保证第一位不是零
*
* @return
*/
private static String getPrefix() {
return prefix[RandomUtils.nextInt(9)] + "";
}
}
分享到:
相关推荐
Spring Boot不直接提供生成随机数的功能,但你可以结合Java的`Random`类或者第三方库如`org.apache.commons.lang3.RandomStringUtils`来实现。例如,你可以在启动时生成一个随机数并保存为属性: ```properties ...
Xeger是基于Java的org.apache.commons.text.RandomStringGenerator类和org.apache.commons.lang3.RandomStringUtils库的一个扩展,专为匹配正则表达式而设计。这个功能在测试、数据模拟和随机数据生成场景中尤其有用...
我们可以使用`Pattern`和`Matcher`类来解析和匹配正则表达式,而`Random`类则可以生成随机数,结合这两者,我们就可以构建出满足正则要求的随机数据。 首先,我们需要一个函数来根据正则表达式生成单个随机字符串。...
我们可以使用Java的`Random`类或者`SecureRandom`类生成随机数,然后将其转换为字符。考虑到可读性,可以限制字符集为大写字母、小写字母和数字。 2. **组合验证码字符串**:将生成的随机字符拼接成一个字符串,这...
在这种情况下,可以使用`RandomStringUtils.randomAlphanumeric(int count)`或`RandomStringUtils.randomAlphabetic(int count)`结合`RandomStringUtils.randomAscii(int count)`,根据需求生成包含特定字符集的随机...
首先,我们可以使用`java.util.Random`类来生成随机整数或浮点数。`Random`类是Java内置的随机数生成器,可以生成0到最大值(包括0但不包括最大值)之间的随机数。例如,要生成一个1到100之间的随机整数,可以这样做...
例如,生成一个4位的验证码,可以是`RandomStringUtils.random(4, true, true)`(使用Apache Commons Lang库)。 3. **扭曲和干扰**:为了增加自动化程序识别的难度,通常会对验证码图像进行扭曲、加噪或者添加干扰...
或者使用第三方库如Apache Commons Lang的`RandomStringUtils`,简化随机字符串的生成。 总的来说,Java验证码生成类的设计和实现涉及到图像处理、随机数生成以及会话管理等多个技术领域。通过理解并实践这些知识点...
例如,可以使用`org.apache.commons.lang3.RandomStringUtils`类,它提供了生成随机字符串的方法。以下是如何利用这个类来生成32位的随机字符串ID: ```java import org.apache.commons.lang3.RandomStringUtils; ...
此外,还可以参考开源项目中的实现,例如Apache Commons Lang的`org.apache.commons.lang3.RandomStringUtils`类,它提供了生成固定长度随机字符串的方法。通过结合特定算法,可以使用这个工具类生成具有全局唯一性...
1. **随机数生成**:Java的`java.util.Random`类是生成随机数的基础。通过设置范围和类型(整数、浮点数),可以生成各种随机数据。例如,`nextInt()`用于生成整数,`nextDouble()`用于生成双精度浮点数。 2. **...
使用`RandomStringUtils`可以很方便地在测试代码中生成模拟数据,或者在需要随机字符串的场景下快速实现功能。例如,在密码重置、生成唯一标识符或者填充数据库测试数据时,它都是非常有用的工具。 在实际项目中,...
可以优化为一次性生成一个8位长的随机字符串,例如使用`StringBuilder`和`RandomStringUtils.randomAlphanumeric()`方法。 4. **并发安全性**:如果这个ID生成器在多线程环境下使用,可能存在并发问题。由于`Random...
在实际的实现中,验证码生成系统会首先生成一个随机字符串,然后使用`RandomImage.java`中的方法将其转化为扭曲的图像。`UserwebRandomImage.java`会处理与用户交互的部分,如显示验证码图片,以及处理用户输入的...
可以使用Java的Random类或第三方库如Apache Commons Lang的RandomStringUtils生成。 2. 存储验证码:生成的验证码需要临时存储,一般在服务器端的内存或数据库中,以便后续验证。同时,需要设置过期时间以确保安全性...
10. **第三方库**:在实际开发中,为提高效率,开发者可能会选择使用第三方库,如Apache Commons Codec的`RandomStringUtils`,或者开源验证码库如JCaptcha、EasyCAPTCHA等。 以上就是关于"JavaWeb生成验证码程序...
- **随机字符串生成**:利用`RandomStringUtils`类中的`randomAlphanumeric`方法生成包含字母和数字的随机字符串。 - **图像处理**:通过`BufferedImage`和`Graphics`对象绘制验证码图像,涉及颜色设置、字体样式和...
必须使用的jar包。为JRE5.0+的更好的版本所提供 Jar文件包含的类: META-INF/MANIFEST.MFMETA-INF/LICENSE.txtMETA-INF/NOTICE.txtorg.apache.commons.lang.ArrayUtils.class org.apache.commons.lang.BitField....
在Spring Boot中,我们可以使用Java的`Random`类或者第三方库如Apache Commons Lang的`RandomStringUtils`来生成随机字符串。图像部分则可以通过Java的`BufferedImage`类和`Graphics2D`接口实现,将字符串绘制到图像...
在Spring Boot中,我们可以使用第三方库如`Google's Guava`的`RandomStrings`类或者`Apache Commons Lang`的`RandomStringUtils`来生成随机字符串作为验证码。生成的验证码通常包含4到6个随机字符,可以是字母或数字...