当前位置: 移动技术网 > IT编程>开发语言>Java > java随机数生产算法实例

java随机数生产算法实例

2019年07月19日  | 移动技术网IT编程  | 我要评论

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随机数生产算法实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网