史上最全的java随机数/字符串生成算法(转)

时间:2021-06-06 14:30:46

代码如下:

  1. package com.zuidaima.core.util;
  2. import java.util.Random;
  3. public class RandomUtil {
  4. public static final String ALLCHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  5. public static final String LETTERCHAR = "abcdefghijkllmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  6. public static final String NUMBERCHAR = "0123456789";
  7. /**
  8. * 返回一个定长的随机字符串(只包含大小写字母、数字)
  9. *
  10. * @param length
  11. *            随机字符串长度
  12. * @return 随机字符串
  13. */
  14. public static String generateString(int length) {
  15. StringBuffer sb = new StringBuffer();
  16. Random random = new Random();
  17. for (int i = 0; i < length; i++) {
  18. sb.append(ALLCHAR.charAt(random.nextInt(ALLCHAR.length())));
  19. }
  20. return sb.toString();
  21. }
  22. /**
  23. * 返回一个定长的随机纯字母字符串(只包含大小写字母)
  24. *
  25. * @param length
  26. *            随机字符串长度
  27. * @return 随机字符串
  28. */
  29. public static String generateMixString(int length) {
  30. StringBuffer sb = new StringBuffer();
  31. Random random = new Random();
  32. for (int i = 0; i < length; i++) {
  33. sb.append(ALLCHAR.charAt(random.nextInt(LETTERCHAR.length())));
  34. }
  35. return sb.toString();
  36. }
  37. /**
  38. * 返回一个定长的随机纯大写字母字符串(只包含大小写字母)
  39. *
  40. * @param length
  41. *            随机字符串长度
  42. * @return 随机字符串
  43. */
  44. public static String generateLowerString(int length) {
  45. return generateMixString(length).toLowerCase();
  46. }
  47. /**
  48. * 返回一个定长的随机纯小写字母字符串(只包含大小写字母)
  49. *
  50. * @param length
  51. *            随机字符串长度
  52. * @return 随机字符串
  53. */
  54. public static String generateUpperString(int length) {
  55. return generateMixString(length).toUpperCase();
  56. }
  57. /**
  58. * 生成一个定长的纯0字符串
  59. *
  60. * @param length
  61. *            字符串长度
  62. * @return 纯0字符串
  63. */
  64. public static String generateZeroString(int length) {
  65. StringBuffer sb = new StringBuffer();
  66. for (int i = 0; i < length; i++) {
  67. sb.append('0');
  68. }
  69. return sb.toString();
  70. }
  71. /**
  72. * 根据数字生成一个定长的字符串,长度不够前面补0
  73. *
  74. * @param num
  75. *            数字
  76. * @param fixdlenth
  77. *            字符串长度
  78. * @return 定长的字符串
  79. */
  80. public static String toFixdLengthString(long num, int fixdlenth) {
  81. StringBuffer sb = new StringBuffer();
  82. String strNum = String.valueOf(num);
  83. if (fixdlenth - strNum.length() >= 0) {
  84. sb.append(generateZeroString(fixdlenth - strNum.length()));
  85. } else {
  86. throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth
  87. + "的字符串发生异常!");
  88. }
  89. sb.append(strNum);
  90. return sb.toString();
  91. }
  92. /**
  93. * 每次生成的len位数都不相同
  94. *
  95. * @param param
  96. * @return 定长的数字
  97. */
  98. public static int getNotSimple(int[] param, int len) {
  99. Random rand = new Random();
  100. for (int i = param.length; i > 1; i--) {
  101. int index = rand.nextInt(i);
  102. int tmp = param[index];
  103. param[index] = param[i - 1];
  104. param[i - 1] = tmp;
  105. }
  106. int result = 0;
  107. for (int i = 0; i < len; i++) {
  108. result = result * 10 + param[i];
  109. }
  110. return result;
  111. }
  112. public static void main(String[] args) {
  113. System.out.println("返回一个定长的随机字符串(只包含大小写字母、数字):" + generateString(10));
  114. System.out
  115. .println("返回一个定长的随机纯字母字符串(只包含大小写字母):" + generateMixString(10));
  116. System.out.println("返回一个定长的随机纯大写字母字符串(只包含大小写字母):"
  117. + generateLowerString(10));
  118. System.out.println("返回一个定长的随机纯小写字母字符串(只包含大小写字母):"
  119. + generateUpperString(10));
  120. System.out.println("生成一个定长的纯0字符串:" + generateZeroString(10));
  121. System.out.println("根据数字生成一个定长的字符串,长度不够前面补0:"
  122. + toFixdLengthString(123, 10));
  123. int[] in = { 1, 2, 3, 4, 5, 6, 7 };
  124. System.out.println("每次生成的len位数都不相同:" + getNotSimple(in, 3));
  125. }
  126. }