本文實(shí)例講述了php生成隨機(jī)數(shù)/生成隨機(jī)字符串的方法。分享給大家供大家參考,具體如下:
有時候我們的項(xiàng)目需要生成隨機(jī)數(shù),但是又不想那么麻煩,那么我們可以使用下面這5種方法生成。
第一種:mt_rand()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<?php function GetRandStr( $length ){ //字符組合 $str = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' ; $len = strlen ( $str )-1; $randstr = '' ; for ( $i =0; $i < $length ; $i ++) { $num =mt_rand(0, $len ); $randstr .= $str [ $num ]; } return $randstr ; } //傳入長度 $number = GetRandStr(6); echo $number ; ?> |
第二種:array_rand()數(shù)組
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
<?php function make_password( $length ) { // 密碼字符集,可任意添加你需要的字符 $str = array ( 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' , 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' , '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' ); // 在 $str 中隨機(jī)取 $length 個數(shù)組元素鍵名 $keys = array_rand ( $str , $length ); $password = '' ; for ( $i = 0; $i < $length ; $i ++) { // 將 $length 個數(shù)組元素連接成字符串 $password .= $str [ $keys [ $i ]]; } return $password ; } echo make_password(6); ?> |
第三種:把字符串打亂,然后返回其中的一小截
1
2
3
4
5
6
7
8
9
|
<?php function getrandstr( $length ){ $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890' ; $randStr = str_shuffle ( $str ); //打亂字符串 $rands = substr ( $randStr ,0, $length ); //substr(string,start,length);返回字符串的一部分 return $rands ; } echo getrandstr(6); ?> |
第四種:返回任意隨機(jī)數(shù)
1
2
3
4
|
<?php //返回1000-9999其中的一個隨機(jī)數(shù) echo rand(1000,9999); ?> |
第五種:對時間戳進(jìn)行MD5加密,截取其中一部分
1
2
3
4
5
6
7
8
|
<?php function token( $length ){ $str = md5(time()); $token = substr ( $str ,5, $length ); return $token ; } echo token(6); ?> |
5種方法,任你選擇,當(dāng)然還有很多方法,例如多個字符串進(jìn)行拼接,最后做md5加密或SHA1加密,然后返回字符串,這種比較普遍用于token驗(yàn)證或簽名驗(yàn)證。
希望本文所述對大家PHP程序設(shè)計(jì)有所幫助。
原文鏈接:https://segmentfault.com/a/1190000022718001