java随机数生产算法实例

时间:2022-09-23 15:29:19

java提供了Math.random()函数,返回一个double类型的随机数,也有util包里的Random类,可以生成double,int,float,long,bytes等随机数。

但有些业务需求,往往需要对这些方法做一下封装。比如用固定因子生成32位的3DES算法key值。

下面提供一些封装的方法:

?
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
package test;
 
import java.util.Random;
 
public class RandomUtil {
 
  public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  public static final String LETTERCHAR = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  public static final String NUMBERCHAR = "0123456789";
 
  /**
   * 返回一个定长的带因子的固定的随机字符串(只包含大小写字母、数字)
   *
   * @param length
   *      随机字符串长度
   * @return 随机字符串
   */
  public static String generateStringByKey(int length, int channel) {
    StringBuffer sb = new StringBuffer();
    Random random = new Random(channel);
    for (int i = 0; i < length; i++) {
      sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.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 generateMixString(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 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();
  }
 
  /**
   * 每次生成的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 void main(String[] args) {
    int channel = 555555;// 测试因子比生产因子少1
    System.out.println("返回一个定长的带因子的固定的随机字符串(只包含大小写字母、数字):" + generateStringByKey(32, channel));
    System.out.println("返回一个定长的随机字符串(只包含大小写字母、数字):" + generateString(32));
    System.out.println("返回一个定长的随机纯字母字符串(只包含大小写字母):" + generateMixString(10));
    System.out.println("返回一个定长的随机纯大写字母字符串(只包含大小写字母):" + generateLowerString(10));
    System.out.println("返回一个定长的随机纯小写字母字符串(只包含大小写字母):" + generateUpperString(10));
    System.out.println("生成一个定长的纯0字符串:" + generateZeroString(10));
    System.out.println("根据数字生成一个定长的字符串,长度不够前面补0:" + toFixdLengthString(123, 10));
    int[] in = { 1, 2, 3, 4, 5, 6, 7 };
    System.out.println("每次生成的len位数都不相同:" + getNotSimple(in, 3));
  }
}

运行效果如下:

java随机数生产算法实例

以上这篇java随机数生产算法实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/shindo/p/5995849.html