java生成随机数工具类

描述

生成制定范围内的随机数、返回固定长度的数字、返回一个定长的随机字符串(只包含大小写字母、数字)、返回一个定长的随机纯字母字符串(只包含大小写字母)、返回一个定长的随机纯大写字母字符串(只包含大小写字母)、返回一个UUID等等。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
package com.common.utils.random;
import java.util.*;
public final class RandomUtil {
public static final String ALLCHAR
= "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String LETTERCHAR
= "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static final String NUMBERCHAR
= "0123456789";


/**
* 生成制定范围内的随机数
*
* @param scopeMin
* @param scoeMax
* @return
*/
public static int integer(int scopeMin, int scoeMax) {
Random random = new Random();
return (random.nextInt(scoeMax) % (scoeMax - scopeMin + 1) + scopeMin);
}

/**
* 返回固定长度的数字
*
* @param length
* @return
*/
public static String number(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 String(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 MixString(int length) {
StringBuffer sb = new StringBuffer();
Random random = new Random();
for (int i = 0; i < length; i++) {
sb.append(ALLCHAR.charAt(random.nextInt(LETTERCHAR.length())));
}
return sb.toString();
}

/**
* 返回一个定长的随机纯大写字母字符串(只包含大小写字母)
*
* @param length 随机字符串长度
* @return 随机字符串
*/
public static String LowerString(int length) {
return MixString(length).toLowerCase();
}

/**
* 返回一个定长的随机纯小写字母字符串(只包含大小写字母)
*
* @param length 随机字符串长度
* @return 随机字符串
*/
public static String UpperString(int length) {
return MixString(length).toUpperCase();
}

/**
* 生成一个定长的纯0字符串
*
* @param length 字符串长度
* @return 纯0字符串
*/
public static String ZeroString(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(ZeroString(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(ZeroString(fixdlenth - strNum.length()));
} else {
throw new RuntimeException("将数字" +
num + "转化为长度为" + fixdlenth + "的字符串发生异常!");
}
sb.append(strNum);
return sb.toString();
}

/**
* 每次生成的len位数都不相同
*
* @param param
* @return 定长的数字
*/
public static int getNotSimple(int[] param, int len) {
Random rand = new Random();
for (int i = param.length; i > 1; i--) {
int index = rand.nextInt(i);
int tmp = param[index];
param[index] = param[i - 1];
param[i - 1] = tmp;
}
int result = 0;
for (int i = 0; i < len; i++) {
result = result * 10 + param[i];
}
return result;
}

/**
* 从指定的数组中随机数组中的某个元素
*/
public static <T> T randomItem(T[] param) {
int index = integer(0, param.length);
return param[index];
}

/**
* 实现一个简单的字符串乘法
* @param str
* @param multiplication
* @return
*/
private static String strMultiplication(String str,int multiplication){
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < multiplication; i++) {
buffer.append(str);
}
return buffer.toString();
}
/**
* 从指定的数组中按照指定比例返回指定的随机元素
* @param param
* @param percentum
* @param <T>
* @return
*/
public static <T> T randomItem(T[] param,double[] percentum){
int length = percentum.length;
Integer[] ints = doubleBitCount(percentum);
int max = Collections.max(Arrays.asList(ints));
int[] arr = new int[length];
int sum = 0;
Map map = new HashMap(length);
int multiple = Integer.parseInt("1"+strMultiplication("0",max));
for (int i = 0; i < length; i++) {
int temp = (int)(percentum[i] * multiple);
arr[i] = temp;
if(i == 0){
map.put(i,new int[]{1,temp});
}else{
map.put(i,new int[]{sum,sum+temp});
}
sum += temp;
}
int indexSum = integer(1,sum);
int index =-1;
for (int i = 0; i < length; i++) {
int[] scope = (int[]) map.get(i);
if(indexSum ==1 ){
index = 0;
break;
}
if(indexSum > scope[0] && indexSum <= scope[1]){
index =i;
break;
}
}
if(index == -1){
throw new RuntimeException("随机失败");
}else{
return param[index];
}
}

/**
* 返回一个UUID
*
* @return 小写的UUID
*/
public static String uuid() {
UUID uuid = UUID.randomUUID();
String s = uuid.toString();
return s.substring(0, 8) + s.substring(9, 13) +
s.substring(14, 18) + s.substring(19, 23) + s.substring(24);
}

/**
* 返回一个UUID
*
* @return 大写的UUID
*/
public static String UUID() {
UUID uuid = UUID.randomUUID();
String s = uuid.toString();
String temp = s.substring(0, 8) + s.substring(9, 13) +
s.substring(14, 18) + s.substring(19, 23) + s.substring(24);
return temp.toUpperCase();
}

/**
* 返回一个有序列的uuid编码
* 前11位为时间(毫秒)
* 中间4位为主机特征码
* 剩下的保证其唯一性
*
* @return
*/
public static String squid() {
Long date = new Date().getTime();
String s = UUID.randomUUID().toString();
String str = Long.toHexString(date);
String result = str + "0001"
+ s.substring(17, 18) + s.substring(19, 23) + s.substring(24);
return result.toUpperCase();
}

/**
* 获取一个double类型的数字的小数位有多长
* @param arr double类型的数组
* @return integer类型长度值
*/
public static Integer[] doubleBitCount(double[] arr){
Integer[] len = new Integer[arr.length];
for (int i = 0; i < arr.length; i++) {
len[i] = doueleBitCount(arr[i]);
}
return len;
}

/**
* 获取一个double类型的数字的小数位有多长
* @param dd
* @return
*/
public static int doueleBitCount(double dd){
String temp = String.valueOf(dd);
int i = temp.indexOf(".");
if(i > -1){
return temp.length()-i -1;
}
return 0;

}
}

本文标题:java生成随机数工具类

文章作者:wangming

发布时间:2019年01月21日 - 23:48:45

最后更新:2019年01月22日 - 23:37:11

原始链接:https://syxiaowanzi.github.io/2019/01/21/java生成随机数工具类/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%