中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

Java獲取隨機(jī)數(shù)生成隨機(jī)字符串?用于驗證碼等之類的工具

2018-07-20    來源:open-open

容器云強(qiáng)勢上線!快速搭建集群,上萬Linux鏡像隨意使用

Java獲取隨機(jī)數(shù)生成隨機(jī)字符串用于驗證碼等之類的工具

隨機(jī)數(shù)在實際中使用很廣泛,比如要隨即生成一個固定長度的字符串、數(shù)字;蛘唠S即生成一個不定長度的數(shù)字、或者進(jìn)行一個模擬的隨機(jī)選擇等等。Java提供了最基本的工具,可以幫助開發(fā)者來實現(xiàn)這一切。

      一、Java隨機(jī)數(shù)的產(chǎn)生方式
在Java中,隨機(jī)數(shù)的概念從廣義上將,有三種。
1、通過System.currentTimeMillis()來獲取一個當(dāng)前時間毫秒數(shù)的long型數(shù)字。
2、通過Math.random()返回一個0到1之間的double值。
3、通過Random類來產(chǎn)生一個隨機(jī)數(shù),這個是專業(yè)的Random工具類,功能強(qiáng)大。

     二、Random類API說明
1、Java API說明
Random類的實例用于生成偽隨機(jī)數(shù)流。此類使用 48 位的種子,使用線性同余公式對其進(jìn)行修改(請參閱 Donald Knuth 的《The Art of Computer Programming, Volume 2》,第 3.2.1 節(jié))。

      如果用相同的種子創(chuàng)建兩個Random 實例,則對每個實例進(jìn)行相同的方法調(diào)用序列,它們將生成并返回相同的數(shù)字序列。為了保證屬性的實現(xiàn),為類 Random 指定了特定的算法。 很多應(yīng)用程序會發(fā)現(xiàn) Math 類中的 random 方法更易于使用。
      2、方法摘要
Random()
創(chuàng)建一個新的隨機(jī)數(shù)生成器。

Random(long seed)
使用單個 long 種子創(chuàng)建一個新隨機(jī)數(shù)生成器:
      public Random(long seed) { setSeed(seed); } next 方法使用它來保存隨機(jī)數(shù)生成器的狀態(tài)。

protected int next(int bits)
生成下一個偽隨機(jī)數(shù)。

boolean nextBoolean()
返回下一個偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、均勻分布的 boolean 值。

void nextBytes(byte[] bytes)
生成隨機(jī)字節(jié)并將其置于用戶提供的字節(jié)數(shù)組中。

double nextDouble()
返回下一個偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0.0 和 1.0之間均勻分布的 double 值。

float nextFloat()
返回下一個偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0.0 和 1.0 之間均勻分布的 float 值。

double nextGaussian()
返回下一個偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、呈高斯(“正常地”)分布的 double 值,其平均值是 0.0,標(biāo)準(zhǔn)偏差是 1.0。

int nextInt()
返回下一個偽隨機(jī)數(shù),它是此隨機(jī)數(shù)生成器的序列中均勻分布的 int 值。

int nextInt(int n)
返回一個偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、在 0(包括)和指定值(不包括)之間均勻分布的 int值。

long nextLong()
返回下一個偽隨機(jī)數(shù),它是從此隨機(jī)數(shù)生成器的序列中取出的、均勻分布的 long 值。

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


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

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("------------------------------------------------數(shù)字字符---------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomNumberChar(): " + i + " -------");
			System.out.println(getRandomNumberChar(p));
		}
		
		System.out.println("-----------------------------------------------數(shù)字加大寫字母字符----------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomNumberUpperLetterChar(): " + i + " -------");
			System.out.println(getRandomNumberUpperLetterChar(p));
		}
		
		System.out.println("------------------------------------------------數(shù)字加小寫字母字符---------");
		for(int i = 0; i < k; i++) {
			System.out.println("getRandomNumberLowerLetterChar(): " + i + " -------");
			System.out.println(getRandomNumberLowerLetterChar(p));
		}
	}
}

執(zhí)行結(jié)果:

---------------------------------------------------全部字符------
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
------------------------------------------------數(shù)字字符---------
getRandomNumberChar(): 0 -------
5719098166
getRandomNumberChar(): 1 -------
2287585971
getRandomNumberChar(): 2 -------
9795327982
-----------------------------------------------數(shù)字加大寫字母字符----------
getRandomNumberUpperLetterChar(): 0 -------
FVAXXHJUKB
getRandomNumberUpperLetterChar(): 1 -------
NERGIBIJBW
getRandomNumberUpperLetterChar(): 2 -------
SSUZ2D15DP
------------------------------------------------數(shù)字加小寫字母字符---------
getRandomNumberLowerLetterChar(): 0 -------
snilxiubpp
getRandomNumberLowerLetterChar(): 1 -------
anqpfmyaac
getRandomNumberLowerLetterChar(): 2 -------
pro31itmu8

標(biāo)簽: 開發(fā)者

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:利用Socket與服務(wù)器端交互的簡單Android范例代碼

下一篇:Java實現(xiàn)的二分查找算法