Java獲取隨機數生成隨機字符串用於驗證碼等之類的工具

Java獲取隨機數生成隨機字符串用於驗證碼等之類的工具 java

隨機數在實際中使用很普遍,好比要隨即生成一個固定長度的字符串、數字。或者隨即生成一個不定長度的數字、或者進行一個模擬的隨機選擇等等。Java提供了最基本的工具,能夠幫助開發者來實現這一切。 算法

      1、Java隨機數的產生方式
  在Java中,隨機數的概念從廣義上將,有三種。
  一、經過System.currentTimeMillis()來獲取一個當前時間毫秒數的long型數字。
  二、經過Math.random()返回一個0到1之間的double值。
  三、經過Random類來產生一個隨機數,這個是專業的Random工具類,功能強大。 shell

     2、Random類API說明
  一、Java API說明
  Random類的實例用於生成僞隨機數流。此類使用 48 位的種子,使用線性同餘公式對其進行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節)。 數組

      若是用相同的種子建立兩個Random 實例,則對每一個實例進行相同的方法調用序列,它們將生成並返回相同的數字序列。爲了保證屬性的實現,爲類 Random 指定了特定的算法。 不少應用程序會發現 Math 類中的 random 方法更易於使用。
      二、方法摘要
  Random()
  建立一個新的隨機數生成器。

  Random(long seed)
  使用單個 long 種子建立一個新隨機數生成器:
      public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機數生成器的狀態。

  protected int next(int bits)
  生成下一個僞隨機數。

  boolean nextBoolean()
  返回下一個僞隨機數,它是今後隨機數生成器的序列中取出的、均勻分佈的 boolean 值。

  void nextBytes(byte[] bytes)
  生成隨機字節並將其置於用戶提供的字節數組中。

  double nextDouble()
  返回下一個僞隨機數,它是今後隨機數生成器的序列中取出的、在 0.0 和 1.0之間均勻分佈的 double 值。

  float nextFloat()
  返回下一個僞隨機數,它是今後隨機數生成器的序列中取出的、在 0.0 和 1.0 之間均勻分佈的 float 值。

  double nextGaussian()
  返回下一個僞隨機數,它是今後隨機數生成器的序列中取出的、呈高斯(「正常地」)分佈的 double 值,其平均值是 0.0,標準誤差是 1.0。

  int nextInt()
  返回下一個僞隨機數,它是此隨機數生成器的序列中均勻分佈的 int 值。

  int nextInt(int n)
  返回一個僞隨機數,它是今後隨機數生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分佈的 int值。

  long nextLong()
  返回下一個僞隨機數,它是今後隨機數生成器的序列中取出的、均勻分佈的 long 值。

  void setSeed(long seed)
  使用單個 long 種子設置此隨機數生成器的種子。


    3、Random類使用說明
  一、帶種子與不帶種子的區別
  Random類使用的根本是策略分帶種子和不帶種子的Random的實例。
  通俗說,二者的區別是:
  帶種子的,每次運行生成的結果都是同樣的。
  不帶種子的,每次運行生成的都是隨機的,沒有規律可言。
  二、建立不帶種子的Random對象
  Random random = new Random();
  三、建立帶種子的Random對象
  有兩種方法:
  1) Random random = new Random(555L);
  2) Random random = new Random();
  random.setSeed(555L);  app

package com.t.test;

import java.util.Random;

public class RandomCharUtil {
u	public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	public static final String upperLetterChar = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	public static final String lowerLetterChar = "abcdefghijklmnopqrstuvwxyz";
	public static final String numberChar = "0123456789";
	public static final String numberLowerLetterChar = "0123456789abcdefghijklmnopqrstuvwxyz";
	public static final String numberUpperLetterChar = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	public static String getRandomALLChar(int n) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for(int i = 0; i < n; i++) {
			sb.append( allChar.charAt( random.nextInt( allChar.length() ) ) );
		}
		return sb.toString();
	}
	
	public static String getRandomLetterChar(int n) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for(int i = 0; i < n; i++) {
			sb.append( letterChar.charAt( random.nextInt( letterChar.length() ) ) );
		}
		return sb.toString();
	}
	
	public static String getRandomUpperLetterChar(int n) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for(int i = 0; i < n; i++) {
			sb.append( upperLetterChar.charAt( random.nextInt( upperLetterChar.length() ) ) );
		}
		return sb.toString();
	}
	
	public static String getRandomLowerLetterChar(int n) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for(int i = 0; i < n; i++) {
			sb.append( lowerLetterChar.charAt( random.nextInt( lowerLetterChar.length() ) ) );
		}
		return sb.toString();
	}
	
	public static String getRandomNumberChar(int n) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for(int i = 0; i < n; i++) {
			sb.append( numberChar.charAt( random.nextInt( numberChar.length() ) ) );
		}
		return sb.toString();
	}
	
	public static String getRandomNumberLowerLetterChar(int n) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for(int i = 0; i < n; i++) {
			sb.append( numberLowerLetterChar.charAt( random.nextInt( numberLowerLetterChar.length() ) ) );
		}
		return sb.toString();
	}
	
	public static String getRandomNumberUpperLetterChar(int n) {
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for(int i = 0; i < n; i++) {
			sb.append( numberUpperLetterChar.charAt( random.nextInt( numberUpperLetterChar.length() ) ) );
		}
		return sb.toString();
	}


	public static void main(String[] args) {
		int k = 3;
		int p = 10;
		System.out.println("---------------------------------------------------所有字符------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomAllChar(): " + i + " -------");
			System.out.println(getRandomALLChar(p));
		}
		
		System.out.println("------------------------------------------------字母字符---------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomLetterChar(): " + i + " -------");
			System.out.println(getRandomLetterChar(p));
		}
		
		System.out.println("-------------------------------------------------大寫字母字符--------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomUpperLetterChar(): " + i + " -------");
			System.out.println(getRandomUpperLetterChar(p));
		}
		
		System.out.println("-------------------------------------------------小寫字母字符--------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomLowerLetterChar(): " + i + " -------");
			System.out.println(getRandomLowerLetterChar(p));
		}
		
		System.out.println("------------------------------------------------數字字符---------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomNumberChar(): " + i + " -------");
			System.out.println(getRandomNumberChar(p));
		}
		
		System.out.println("-----------------------------------------------數字加大寫字母字符----------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomNumberUpperLetterChar(): " + i + " -------");
			System.out.println(getRandomNumberUpperLetterChar(p));
		}
		
		System.out.println("------------------------------------------------數字加小寫字母字符---------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomNumberLowerLetterChar(): " + i + " -------");
			System.out.println(getRandomNumberLowerLetterChar(p));
		}
	}
}

執行結果: dom

---------------------------------------------------所有字符------
getRandomAllChar(): 0 -------
QQP1kteBVf
getRandomAllChar(): 1 -------
RIsyNShDEv
getRandomAllChar(): 2 -------
J3BnwV1a5H
------------------------------------------------字母字符---------
getRandomLetterChar(): 0 -------
BVEOIGxWMt
getRandomLetterChar(): 1 -------
OxarWASEpu
getRandomLetterChar(): 2 -------
ooLqvyTjaT
-------------------------------------------------大寫字母字符--------
getRandomUpperLetterChar(): 0 -------
QVSITHVVIX
getRandomUpperLetterChar(): 1 -------
AFEZFPFTHL
getRandomUpperLetterChar(): 2 -------
EJGUQHAIJO
-------------------------------------------------小寫字母字符--------
getRandomLowerLetterChar(): 0 -------
pogvpjuxqr
getRandomLowerLetterChar(): 1 -------
dzncqrzmjc
getRandomLowerLetterChar(): 2 -------
bjcxhodkry
------------------------------------------------數字字符---------
getRandomNumberChar(): 0 -------
5719098166
getRandomNumberChar(): 1 -------
2287585971
getRandomNumberChar(): 2 -------
9795327982
-----------------------------------------------數字加大寫字母字符----------
getRandomNumberUpperLetterChar(): 0 -------
FVAXXHJUKB
getRandomNumberUpperLetterChar(): 1 -------
NERGIBIJBW
getRandomNumberUpperLetterChar(): 2 -------
SSUZ2D15DP
------------------------------------------------數字加小寫字母字符---------
getRandomNumberLowerLetterChar(): 0 -------
snilxiubpp
getRandomNumberLowerLetterChar(): 1 -------
anqpfmyaac
getRandomNumberLowerLetterChar(): 2 -------
pro31itmu8
相關文章
相關標籤/搜索