php变量值随机,PHP生成各类随机数值
今天研究易支付系統測試支付功能的時候,突然想到說用戶打開隨機產生數值進行測試支付可以有效的防止一些不安好心的人惡意舉報,于是我就網上沖浪,整理了幾個關于PHP隨機產生數值的方法。下面就分享給大家!
$FileID=date("Ymd-His") . '-' . rand(100,999);
// $FileID為 20190225-132121-908 這樣的的隨機數
echo date("YmdHis").mt_rand(100,999);
// 同樣也可以這樣得出 20190225132121908 這樣的隨機數
?>
function randomkeys($length)
{
$key = '';
$pattern='1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ';
for($i=0;$i
{
$key .= $pattern{mt_rand(0,35)}; //生成php隨機數
}
return $key;
}
echo randomkeys(4);
?>
//seed用戶自定義函數以微秒作為種子
function seed()
{
list($msec, $sec) = explode(' ', microtime());
return (float) $sec;
}
//播下隨機數發生器種子,用srand函數調用seed函數的返回結果
srand(seed());
//輸出產生的隨機數,隨機數的范圍為10-100
echo rand(10,100);
?>
上面這個和下面這兩種效果是一樣的,那么具體區別在哪呢?下面會給您解答。
這兩種起到的效果也是一樣的
很多老的 libc 的隨機數發生器具有一些不確定和未知的特性而且很慢。PHP 的 rand() 函數默認使用 libc 隨機數發生器。mt_rand() 函數是非正式用來替換它的。該函數用了 Mersenne Twister 中已知的特性作為隨機數發生器,mt_rand() 可以產生隨機數值的平均速度比 libc 提供的 rand() 快四倍。mt_rand()是更好地隨機數生成器,因為它跟rand()相比播下了一個更好地隨機數種子;而且性能上比rand()快4倍,mt_getrandmax()所表示的數值范圍也更大。
rand()和mt_rand()作用都是產生一個隨機整數,都有兩種使用形式:
int rand(void) / int mt_rand(void)
int rand(int $min, int $max) / int mt_rand($min, $max)
對第一種形式:
rand()產生的隨機數為0到getrandmax()之間
mt_rand()產生的隨機數為0到mt_getrandmax()之間
對第二種形式:
rand()產生從$min到$max之間的隨機數
mt_rand()產生從$min到$max之間的隨機數
PS.隨機浮點數的生成,在PHP手冊里還有一個demo
function randomFloat($min = 0, $max = 1) {
return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}
var_dump(randomFloat());
var_dump(randomFloat(2, 20));
我們再來說說上面說的那兩個效果一樣的為什么要這樣做。
srand是種子,如果不設的話默認是1
rand一般是利用種子做參數的一種固定的運算
你試一下就知道了,不設種子或者設一個固定的種子,運行rand
然后再關了瀏覽器再開,再運行rand
你會發現結果一直是一樣的
先說rand()函數吧,rand([int min], [int max])本函數從min和max之間取一個隨機數。若沒有指定隨機數的最大及最小范圍,本函數會自動的從0到RAND_MAX中取一個隨機數。
但是如果只用rand()這個函數,隨機數的亂度很大,每次在取隨機數之前最好使用srand()函數,以配置新的隨機數種子。
解釋一下下面這個用法(一般都是這樣用這兩個函數的):
srand((double)microtime()*1000000);
$rand_number= rand();
microtime()返回了兩個值:當前毫秒和時間戳,我們要提取隨機數,只能從毫秒中取一個隨機數,(double)microtime()就只返回當前的毫秒值。
microtime()是以秒為單位的毫秒數,因而值都是小數,乘以1000000將其換算為整數
它們的工作流程如下:
(1):首先,給srand()提供一個”種子”;,它是一個unsigned_int類型的值。
(2):_然后,調用rand(),它會根據提供給srand()的值返回一個隨機數(范圍在_0~32767之間)
(3):根據需要多次調用rand(),不斷得到新的隨機數。
(4):無論什么時候可以給srand()提供一個新的“種子”,從而進一步“隨機化”rand()的輸出結果。
本文標簽:PHP
版權聲明:若無特殊注明,本文為《小傲世》原創,轉載請保留文章出處。
本文鏈接:https://pjax.vip/31.html
正文到此結束
總結
以上是生活随笔為你收集整理的php变量值随机,PHP生成各类随机数值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java自动雨刷系统,安装雨量传感器实现
- 下一篇: 数据在java中加时间,如何在Or.jF