java随机数生产算法实例

网友投稿 247 2023-03-27


java随机数生产算法实例

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

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

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

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);

fohttp://r (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(fixzxtcIdlenth - 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 = zxtcIparam.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));

}

}

运行效果如下:


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kryo序列化及反序列化用法示例
下一篇:ES6学习教程之模板字符串详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~