❶ php:如何生成隨機的唯一字母數字字元串
1. 自己寫代碼產生隨機的數字和字母組合,每產生1個去資料庫查詢該隨機碼是否已存在,如果已存在,則重新產生,直到不重復為止。
缺點:產生速度慢,還要查詢資料庫,當數據量大的時候,可能重復的機率會比較高,要查詢多次資料庫.
2. guid,該方法應該是用的比較多的。
優點:使用簡單方便,不用自己編寫額外的代碼
缺點:佔用資料庫空間相對較大,特別是根據guid查詢速度比較慢(畢竟是字元串)。
3. 主鍵+隨機碼的方式,我們產生的隨機碼保存到資料庫肯定會有個主鍵,用該主鍵+隨機字元來組合。產生步驟:
1) 先從id生成器中獲取id,比如是155.
2)填充成固定位數(比如8位)的字元串(不夠位數的左邊填0,超過位數直接使用該數字),得到:00000155
3)在每個數字後面隨機插入1個字母或其它非數字元號,得到:0A0F0R0Y0H1K5L5M
這樣就可以得到1個隨機的唯一的邀請碼了。
優點:使用也比較簡單,不用查詢資料庫。最大的優點是查詢的時候,可以根據邀請碼直接得到主鍵id,然後根據id去資料庫查詢(速度很快),再比較查詢出來的邀請碼和用戶提交的邀請碼是否一致。
缺點:需要使用id產生器,如果主鍵是資料庫自增長的就不太好用(需要先插入資料庫獲取id,再更新邀請碼)。
4. 有時候產品經理說,我要求邀請碼都是數字的。把方法3變通下就可以實現唯一的純數字隨機碼了。
1) 獲取id: 155
2) 轉換成8進制:233
3) 轉為字元串,並在後面加'9'字元:2339
4)在後面隨機產生若干個隨機數字字元:2003967524987
轉為8進制後就不會出現9這個字元,然後在後面加個'9',這樣就能確定唯一性。最後在後面產生一些隨機數字就可以。
❷ php如何生成隨機字元串
方法一
1、在33
–
126中生成一個隨機整數,如35。
2、將35轉換成對應的ASCII碼字元,如35對應#。
3、重復以上1、2步驟n次,連接成n位的密碼。
方法二
1、預置一個的字元串
$chars
,包括
a
–
z,A
–
Z,0
–
9,以及一些特殊字元。
2、在
$chars
字元串中隨機取一個字元。
3、重復第二步n次,可得長度為n的密碼。
方法三
1、預置一個的字元數組
$chars
,包括
a
–
z,A
–
Z,0
–
9,以及一些特殊字元。
2、通過array_rand()從數組$chars中隨機選出$length個元素。
3、根據已獲取的鍵名數組
$keys,從數組$chars取出字元拼接字元串。該方法的缺點是相同的字元不會重復取。
❸ PHP 隨機文字不重復 要從幾十個之間隨機讓他顯示8個 這8個彼此不重復 該怎麼修改 以下代碼能隨機但是重復
樓上的思路沒錯
或者你可以這樣
每次循環把$output放到一個數組里邊 然後判斷此數組里邊是否存在相同的值
如果存在就繼續循環產生隨機數 如果不存在就放入到數組里邊
最後 生成不同的4個以後 你可以把數組編程字元串就可以了
❹ PHP基於自增數據如何生成不重復的隨機數示例
1、 $base 基數組 如果是8位這個數組必須是8位
2、 $i 自增數,自增數不能超過8位數
當前簡單分析的結果就是以上。大家如果是全局不重復,還是建議使用uuid之類的比較合適。
❺ php生成不重復隨機數、數組的4種方法分享
下面寫幾種生成不重復隨機數的方法,直接上代碼吧
復制代碼
代碼如下:
<?php
define('RANDOM_MAX',
100);
define('COUNT',
10);
echo
'max
random
num:
'.RANDOM_MAX,
'
;result
count:'.COUNT,
'<br/>';
invoke_entry('rand1');
invoke_entry('rand2');
invoke_entry('rand3');
invoke_entry('rand4');
function
invoke_entry($func_name)
{
$time
=
new
time();
$time->time_start();
call_user_func($func_name);
echo
$func_name.'
time
spend:
',
$time->time_spend();
echo
'<br/>';
}
function
rand1()
{
$numbers
=
range
(1,
RANDOM_MAX);
shuffle($numbers); //隨機打亂數組
$result
=
array_slice($numbers,
1,
COUNT);
return
$result;
}
function
rand2()
{
$result
=
array();
while(count($result)<
COUNT)
{
$result[]
=
mt_rand(1,
RANDOM_MAX); //mt_rand()是比rand()更好更快的隨機函數
$result
=
array_unique($result);
//刪除數組中重復的元素
}
return
$result;
}
function
rand3()
{
$result
=
array();
while(count($result)
<
COUNT)
{
$_tmp
=
mt_rand(1,
RANDOM_MAX);
if(!in_array($_tmp,
$result))
{ //當數組中不存在相同的元素時,才允許插入
$result[]
=
$_tmp;
}
}
return
$result;
}
function
rand4()
{
$result
=
array();
while
(count($result)
<
COUNT)
{
$result[]
=
mt_rand(1,
RANDOM_MAX);
$result
=
array_flip(array_flip($result)); //array_flip將數組的key和value交換
}
return
$result;
}
class
time
{
private
$_start;
public
function
time_start()
{
$this->_start
=
$this->microtime_float();
}
public
function
time_spend()
{
return
$this->microtime_float()
-
$this->_start;
}
private
function
microtime_float()
{
list($usec,
$sec)
=
explode("
",
microtime());
return
((float)$usec
+
(float)$sec);
}
}
?>
❻ php怎麼生成6位的不重復的字元串
php生成6位不重復的字元串,用到的工具:notepad++,步驟如下:
php代碼部分:
<?php
echo"刷新輸出不同的六個字元組合:".substr(md5(microtime(true)),0,6);
?>
說明:此函數先獲取當前時間,然後通過md5進行加密,然後再通過substr截取六位數,當前時間是不會重復的,從而保證生成的六個字元串永遠不會重復。
效果圖:
注意事項:此代碼必須在php環境下運行。
❼ PHP編程,讓循環隨機不重復
<?php
$arr=array();
for($i=0;$i<=10;$i++){
$arr[]
=
$i;
}
shuffle($arr);//打亂(隨機排列單元的順序)一個數組
print_r($arr);
?>
這樣打亂的數值就已經在數組里了,可以很方便的調用、
❽ 求PHP語言隨機自動生成不重復的數字
//$count 隨機碼長度
function mrand($count){
$code = '';
for($i=0;$i<$count;$i++){
$code .= mt_rand(0,9);
}
return $code;
}
你還可以在這基礎上擴展,變成還可以選擇隨機碼類型
//生成不重復數字
function gettmp($count){
$temp = aray();
$code = mrand(3);
$i = 0;
while($i < $count){
if(!in_array($code,$temp)){
$temp[] = $code;
$i = $i + 1;
}
}
return $temp;
}
❾ php怎樣生成一個32位的隨機字元串
php生成32位不重復的隨機數,代碼如下:
functiongetRandom($param){
$str="";
$key="";
for($i=0;$i<$param;$i++)
{
$key.=$str{mt_rand(0,32)};//生成php隨機數
}
return$key;
}
調用:getRandom(32)
輸出結果:一個32位隨機數
❿ PHP產生不重復隨機數的5個方法總結
無論是Web應用,還是WAP或者移動應用,隨機數都有其用武之地。在最近接觸的幾個小項目中,我也經常需要和隨機數或者隨機數組打交道,所以,對於PHP如何產生不重復隨機數常用的幾種方法小結一下(ps:方法1、4、5是我常用的,其餘來自網路整理)
方法一:
復制代碼
代碼如下:
<?php
$numbers
=
range
(1,50);
//shuffle
將數組順序隨即打亂
shuffle
($numbers);
//array_slice
取該數組中的某一段
$num=6;
$result
=
array_slice($numbers,0,$num);
print_r($result);
?>
方法二:
復制代碼
代碼如下:
<?php
$numbers
=
range
(1,20);
//播下隨機數發生器種子,可有可無,測試後對結果沒有影響
srand
((float)microtime()*1000000);
shuffle
($numbers);
//跳過list第一個值(保存的是索引)
while
(list(,
$number)
=
each
($numbers))
{
echo
"$number
";
}
?>
方法三:
復制代碼
代碼如下:
<?php
function
NoRand($begin=0,$end=20,$limit=5){
$rand_array=range($begin,$end);
shuffle($rand_array);//調用現成的數組隨機排列函數
return
array_slice($rand_array,0,$limit);//截取前$limit個
}
print_r(NoRand());
?>
上述可以在1-20間隨機產生5個不重復的值
方法四:
復制代碼
代碼如下:
<?php
$tmp=array();
while(count($tmp)<5){
$tmp[]=mt_rand(1,20);
$tmp=array_unique($tmp);
}
print_r($tmp);
?>
方法五:
復制代碼
代碼如下:
<?php
$tmp
=
range(1,30);
print_r(array_rand($tmp,10));
?>
這個可能是比叫簡單的了(ps:如果在range中指定了步長,就必須注意array_rand的第二個參數是否超出$tmp的長度)。
PHP提供非常豐富的數組函數,產生隨機數大多可以從數組這個角度出發,若你還有方法提供,歡迎給出,文章將持續更新。