package com.ruoyi.common.utils; import java.util.*; /** * 随机数、随机字符串生成工具 */ public class RandomUtil extends Random { /** * 所有大小写字母和数字 */ public static final String ALLCHAR = "123456789abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"; public static final String NUMBERLECHAR = "123456789abcdefghijkmnpqrstuvwxyz"; /** * 所有大小写字母 */ public static final String LETTERCHAR = "abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ"; /** * 所有数字 */ public static final String NUMBERCHAR = "0123456789"; /** * 返回一个定长的随机纯数字字符串(只包含数字) * @param length * 随机字符串长度 * @return 随机字符串 */ public static String generateDigitalString(int length) { StringBuffer sb = new StringBuffer(); Random random = new Random(); for (int i = 0; i < length; i++) { sb.append(NUMBERCHAR.charAt(random.nextInt(NUMBERCHAR.length()))); } return sb.toString(); } /** * 返回一个定长的随机字符串(只包含大小写字母、数字) * @param length * 随机字符串长度 * @return 随机字符串 */ public static String generateString(int length) { StringBuffer sb = new StringBuffer(); Random random = new Random(); for (int i = 0; i < length; i++) { sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length()))); } return sb.toString(); } /** * 返回一个定长的随机字符串(只包含小写字母、数字) * @param length * 随机字符串长度 * @return 随机字符串 */ public static String getString(int length) { StringBuffer sb = new StringBuffer(); Random random = new Random(); for (int i = 0; i < length; i++) { sb.append(NUMBERLECHAR.charAt(random.nextInt(NUMBERLECHAR.length()))); } return sb.toString(); } /** * 返回一个定长的随机纯字母字符串(只包含大小写字母) * @param length * 随机字符串长度 * @return 随机字符串 */ public static String generateMixString(int length) { StringBuffer sb = new StringBuffer(); Random random = new Random(); for (int i = 0; i < length; i++) { sb.append(LETTERCHAR.charAt(random.nextInt(LETTERCHAR.length()))); } return sb.toString(); } /** * 返回一个定长的随机纯大写字母字符串(只包含大小写字母) * @param length * 随机字符串长度 * @return 随机字符串 */ public static String generateLowerString(int length) { return generateMixString(length).toLowerCase(); } /** * 返回一个定长的随机纯小写字母字符串(只包含大小写字母) * @param length * 随机字符串长度 * @return 随机字符串 */ public static String generateUpperString(int length) { return generateMixString(length).toUpperCase(); } /** * 生成一个定长的纯0字符串 * @param length * 字符串长度 * @return 纯0字符串 */ public static String generateZeroString(int length) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { sb.append('0'); } return sb.toString(); } /** * 根据数字生成一个定长的字符串,长度不够前面补0 * @param num * 数字 * @param fixdlenth * 字符串长度 * @return 定长的字符串 */ public static String toFixdLengthString(long num, int fixdlenth) { StringBuffer sb = new StringBuffer(); String strNum = String.valueOf(num); if (fixdlenth - strNum.length() >= 0) { sb.append(generateZeroString(fixdlenth - strNum.length())); } else { throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异常!"); } sb.append(strNum); return sb.toString(); } /** * 根据数字生成一个定长的字符串,长度不够前面补0 * @param num * 数字 * @param fixdlenth * 字符串长度 * @return 定长的字符串 */ public static String toFixdLengthString(int num, int fixdlenth) { StringBuffer sb = new StringBuffer(); String strNum = String.valueOf(num); if (fixdlenth - strNum.length() >= 0) { sb.append(generateZeroString(fixdlenth - strNum.length())); } else { throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异常!"); } sb.append(strNum); return sb.toString(); } /** * serialVersionUID:序列化id * * @since 1.0.0 */ private static final long serialVersionUID = 1L; public static RandomUtil getInstance() { return _instance; } public RandomUtil() { super(); } public RandomUtil(long seed) { super(seed); } // public int[] nextInt(int n, int size) { // if (size > n) { // size = n; // } // // Set set = new LinkedHashSet(); // // for (int i = 0; i < size; i++) { // while (true) { // Integer value = new Integer(nextInt(n)); // // if (!set.contains(value)) { // set.add(value); // // break; // } // } // } // // int[] array = new int[set.size()]; // // Iterator itr = set.iterator(); // // for (int i = 0; i < array.length; i++) { // array[i] = (Integer) itr.next(); // } // // return array; // } public void randomize(char[] array) { int length = array.length; for(int i = 0; i < length - 1; i++) { int x = nextInt(length); char y = array[i]; array[i] = array[i + x]; array[i + x] = y; length--; } } public void randomize(int[] array) { int length = array.length; for(int i = 0; i < length - 1; i++) { int x = nextInt(length); int y = array[i]; array[i] = array[i + x]; array[i + x] = y; length--; } } public void randomize(List list) { int size = list.size(); for(int i = 0; i <= size; i++) { int j = nextInt(size); Object obj = list.get(i); list.set(i, list.get(i + j)); list.set(i + j, obj); size--; } } public void randomize(Object[] array) { int length = array.length; for(int i = 0; i < length - 1; i++) { int x = nextInt(length); Object y = array[i]; array[i] = array[i + x]; array[i + x] = y; length--; } } public String randomize(String s) { if (s == null) { return null; } char[] array = s.toCharArray(); randomize(array); return new String(array); } private static RandomUtil _instance = new RandomUtil(); }