package net.caiban.utils.lang; import java.util.HashSet; import java.util.Random; import java.util.Set; import org.apache.commons.lang.StringUtils; /** * <p> * Title: 产生随机数的工具类。 * </p> * <p> * Description: * </p> * <p> * Copyright: Copyright (c) 2003 * </p> * <p> * Company: * </p> * * @author Leon * @version 1.0 */ public class RandomUtils { private static final Random random = new Random(); private RandomUtils() { // random = new Random(); } /** * 生成num个长度为length的字符串(字符串各不相同),字符串只包含字母 * * @param length * 字符串的长度 * @param num * 字符串的个数 * @return */ public static String[] random(int length, int num) { return buildRandom(length, num); } /** * 生成长度为length的字符串,字符串只包含数字 * * @param length * 字符串的长度 * @return */ public static String random(int length) { return buildRandom(length); } /** * 生成num个长度为length的字符串,组成如 123-123-123 格式(只包含数字) * * @param length * @param num * @return * @throws BaseException * */ public static String randombunch(int length, int num) { StringBuffer str = new StringBuffer(); for (int i = 0; i < num; i++) { str.append(RandomUtils.random(length)); if (i != num - 1) str.append("-"); } return str.toString(); } /** * 生成num个长度为length的字符串(字符串各不相同),字符串只包含字母 * * @param length * 字符串的长度 * @param num * 字符串的个数 * @return */ private static String[] buildRandom(final int length, final int num) { if (num < 1 || length < 1) { return null; } Set<String> tempRets = new HashSet<String>(num); // 存放临时结果,以避免重复值的发生 // 生成num个不相同的字符串 while (tempRets.size() < num) { tempRets.add(buildRandom(length)); } String[] rets = new String[num]; rets = tempRets.toArray(rets); return rets; } /** * 返回指定位数的整数 * * @param length * @return * */ public static int buildIntRandom(final int length) { String maxStr = StringUtils.rightPad("1", length + 1, '0'); long max = Long.parseLong(maxStr); long i = Math.abs(random.nextLong()) % max; String rand = String.valueOf(i); return Integer.parseInt(rand); } /** * 取小于指定范围内的整数 * * @param length * @return * */ public static int buildIntRandomBy(final int length) { return (int) (Math.random() * length); } /** * 生成长度为length的字符串,字符串只包含数字 * * @param length * 字符串的长度 * @return */ public static String buildRandom(final int length) { // 长度为length的最多整数 String maxStr = StringUtils.rightPad("1", length + 1, '0'); long max = Long.parseLong(maxStr); long i = random.nextLong(); // 取得随机数 i = Math.abs(i) % max; // 取正数,并限制其长度 String value = StringUtils.leftPad(String.valueOf(i), length, '0'); return value; } }