package com.jsowell.common.util; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import java.security.SecureRandom; import java.util.List; import java.util.Random; import java.util.Set; /** * 获取随机数的工具类 */ public class RandomUtil { private static final String SYMBOLS_NUM = "0123456789"; // 纯数字 //如果需加入字母就改成0123456789abcdefg........... private static final String SYMBOLS_NUM_ALPHABET = "abcdefghijklmnopqrstuvwxyz0123456789"; private static final Random RANDOM = new SecureRandom(); /** * 获取6位的短信验证码 纯数字 * * @return 随机数字 */ public static String getSMSVerificationCode() { return getRandomNumber(6); } /** * 获取指定长度随机数 * * @param length 需要的长度 * @return 随机数 */ public static String getRandomNumber(int length) { char[] nonceChars = new char[length]; //指定长度,自己可以设置 for (int index = 0; index < nonceChars.length; ++index) { nonceChars[index] = SYMBOLS_NUM.charAt(RANDOM.nextInt(SYMBOLS_NUM.length())); } return new String(nonceChars); } /** * 获取一组不重复的6位数随机数 * * @param num 数量 * @return */ public static List getRandomNumberList(int num) { List list = Lists.newArrayList(); for (int i = 0; i < num; i++) { String code = getNotRepeatCode(list); // System.out.println(code); list.add(code); } return list; } /** * 获取一组不重复的6位数随机数 */ private static String getNotRepeatCode(List list) { // 获取随机验证码 String code = RandomUtil.getSMSVerificationCode(); // 判断list中是否存在 boolean contains = list.contains(code); if (contains) { // 已经存在,重新获取一个 code = getNotRepeatCode(list); } return code; } public static void main(String[] args) { List randomNumberList = getRandomNumberList(100000); Set set = Sets.newHashSet(randomNumberList); System.out.println("list长度:" + randomNumberList.size()); System.out.println("set长度:" + set.size()); } }