巧用RandomStringUtils生成随机数

Java提供的随机数工具,或者第三方提供的随机数工具,都不能满足我的需求:产生指定位数且大于0的整数(可以做为ID使用)

        在使用commons-langRandomStringUtils类时,有一个方法引起了我的注意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)] + "";
	}
}

  

 

你可能感兴趣的:(apache,算法,软件测试,idea)