package com.mlongbo.jfinal.common.utils;
import java.util.Random;
import java.util.UUID;
/**
* @author malongbo
*/
public final class RandomUtils {
/**
* Array of numbers and letters of mixed case. Numbers appear in the list
* twice so that there is a more equal chance that a number will be picked.
* We can use the array to get a random number or letter by picking a random
* array index.
*/
private static char[] numbersAndLetters = ("0123456789abcdefghijklmnopqrstuvwxyz" +
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ").toCharArray();
/**
* 根据指定长度随机生成小写字母
* @param length 长度
* @return 指定长度的随机小写字母字符串
*/
public static String randomLowerWords(int length) {
/*
0~9的ASCII为48~57
A~Z的ASCII为65~90
a~z的ASCII为97~122
*/
StringBuilder sb = new StringBuilder();
Random randData = new Random();
int data = 0;
for(int i = 0; i < length; i++)
{
data=randData.nextInt(26)+97;//保证只会产生97~122之间的整数
sb.append((char)data);
}
return sb.toString();
}
/**
* 根据指定长度随机生成大写字母
* @param length 长度
* @return 指定长度的随机大写字母字符串
*/
public static String randomUpperWords(int length) {
/*
0~9的ASCII为48~57
A~Z的ASCII为65~90
a~z的ASCII为97~122
*/
StringBuilder sb = new StringBuilder();
Random randData = new Random();
int data = 0;
for(int i = 0; i < length; i++)
{
data=randData.nextInt(26)+65;//保证只会产生97~122之间的整数
sb.append((char)data);
}
return sb.toString();
}
/**
* 根据指定长度随机生成数字
* @param length 长度
* @return 指定长度的随机数字
*/
public static String randomNumbers(int length) {
/*
0~9的ASCII为48~57
A~Z的ASCII为65~90
a~z的ASCII为97~122
*/
StringBuilder sb = new StringBuilder();
Random randData = new Random();
int data = 0;
for(int i = 0; i < length; i++)
{
data=randData.nextInt(10);//仅仅会生成0~9
sb.append(data);
}
return sb.toString();
}
/**
* 生成32位UUID字符,去除字符'-'
* @return 32位随机UUID字符串
*/
public static String randomCustomUUID() {
UUID uuid = UUID.randomUUID();
String uuidStr = uuid.toString();
return uuidStr.replaceAll("-","");
}
/**
* 生成36位UUID字符
* @return 36未随机UUID字符串
*/
public static String randomUUID() {
return UUID.randomUUID().toString();
}
/**
* Returns a random String of numbers and letters (lower and upper case)
* of the specified length. The method uses the Random class that is
* built-in to Java which is suitable for low to medium grade security uses.
* This means that the output is only pseudo random, i.e., each number is
* mathematically generated so is not truly random.<p>
* <p/>
* The specified length must be at least one. If not, the method will return
* null.
*
* @param length the desired length of the random String to return.
* @return a random String of numbers and letters of the specified length.
*/
public static String randomString(int length) {
if (length < 1) {
return null;
}
// Create a char buffer to put random letters and numbers in.
char[] randBuffer = new char[length];
for (int i = 0; i < randBuffer.length; i++) {
randBuffer[i] = numbersAndLetters[new Random().nextInt(71)];
}
return new String(randBuffer);
}
}