一个最全的随机数的生成算法,最代码的找回密码的随机数就是用的这个方法:
1 String password = RandomUtil.generateString(10);
源码如下:
001 package com.javaniu.core.util;
002
003 import java.util.Random;
004
005 public class RandomUtil {
006 public static finalString ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
007 public static finalString LETTERCHAR = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
008 public static final String NUMBERCHAR = "0123456789";
009
010 /**
011 * 返回一个定长的随机字符串(只包含大小写字母、数字)
012 *
013 * @param length
014 * 随机字符串长度
015 * @return 随机字符串
016 */
017 public static String generateString(int length) {
018 StringBuffer sb = new StringBuffer();
019 Random random = new Random();
020 for (int i = 0; i < length; i++) {
021 sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));
022 }
023 return sb.toString();
024 }
025
026 /**
027 * 返回一个定长的`随机纯字母字符串(只包含大小写字母)
028 *
029 * @param length
030 * 随机字符串长度
031 * @return 随机字符串
032 */
033 public static String generateMixString(int length) {
034 StringBuffer sb = new StringBuffer();
035 Random random = new Random();
036 for (int i = 0; i < length; i++) {
037 sb.append(ALLCHAR.charAt(random.nextInt(LETTERCHAR.length())));
038 }
039 return sb.toString();
040 }
041
042 /**
043 * 返回一个定长的随机纯大写字母字符串(只包含大小写字母)
044 *
045 * @param length
046 * 随机字符串长度
047 * @return 随机字符串
048 */
049 public static String generateLowerString(int length) {
050 return generateMixString(length)。toLowerCase();
051 }
052
053 /**
054 * 返回一个定长的随机纯小写字母字符串(只包含大小写字母)
055 *
056 * @param length
057 * 随机字符串长度
058 * @return 随机字符串
059 */
060 public static String generateUpperString(int length) {
061 return generateMixString(length)。toUpperCase();
062 }
063
064 /**
065 * 生成一个定长的纯0字符串
066 *
067 * @param length
068 * 字符串长度
069 * @return 纯0字符串
070 */
071 public static String generateZeroString(int length) {
072 StringBuffer sb = new StringBuffer();
073 for (int i = 0; i < length; i++) {
074 sb.append('0');
075 }
076 return sb.toString();
077 }
078
079 /**
080 * 根据数字生成一个定长的字符串,长度不够前面补0
081 *
082 * @param num
083 * 数字
084 * @param fixdlenth
085 * 字符串长度
086 * @return 定长的字符串
087 */
088 public static String toFixdLengthString(long num, int fixdlenth) {
089 StringBuffer sb = new StringBuffer();
090 String strNum = String.valueOf(num);
091 if (fixdlenth - strNum.length() >= 0) {
092 sb.append(generateZeroString(fixdlenth - strNum.length()));
093 } else {
094 throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth
095 + "的字符串发生异常!");
096 }
097 sb.append(strNum);
098 return sb.toString();
099 }
100
101 /**
102 * 每次生成的len位数都不相同
103 *
104 * @param param
105 * @return 定长的数字
106 */
107 public static int getNotSimple(int[] param, int len) {
108 Random rand = new Random();
109 for (int i = param.length; i > 1; i--) {
110 int index = rand.nextInt(i);
111 int tmp = param[index];
112 param[index] = param[i - 1];
113 param[i - 1] = tmp;
114 }
115 int result = 0;
116 for (int i = 0; i < len; i++) {
117 result = result * 10 + param[i];
118 }
119 return result;
120 }
121
122 public static void main(String[] args) {
123 System.out.println("返回一个定长的随机字符串(只包含大小写字母、数字):"+ generateString(10));
124 System.out
125 .println("返回一个定长的随机纯字母字符串(只包含大小写字母):"+ generateMixString(10));
126 System.out.println("返回一个定长的随机纯大写字母字符串(只包含大小写字母):"
127 + generateLowerString(10));
128 System.out.println("返回一个定长的随机纯小写字母字符串(只包含大小写字母):"
129 + generateUpperString(10));
130 System.out.println("生成一个定长的纯0字符串:" + generateZeroString(10));
131 System.out.println("根据数字生成一个定长的字符串,长度不够前面补0:"
132 + toFixdLengthString(123, 10));
133 int[] in = { 1, 2, 3, 4, 5, 6, 7 };
134 System.out.println("每次生成的len位数都不相同:" + getNotSimple(in, 3));
135 }
136 }
1.
2.
3.
4.
5.
6.
7.
8.