java随机数生产算法实例
程序员文章站
2024-02-26 14:27:10
java提供了math.random()函数,返回一个double类型的随机数,也有util包里的random类,可以生成double,int,float,long,byt...
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); 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随机数生产算法实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。