導航:首頁 > 編程語言 > phpuniqid高並發

phpuniqid高並發

發布時間:2023-02-27 06:09:41

php生成10位左右,數字、字母混合的字元串且唯一

$yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
$orderSn =
$yCode[intval(date('Y')) - 2017] . strtoupper(dechex(date('m'))) . date(
'd') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf(
'%02d', rand(0, 99));

❷ php解決高並發

<?php

2 //優化方案1:將庫存欄位number欄位設為unsigned,當庫存為0時,因為欄位不能為負數,將會返回false

3 include('./mysql.php');

4 $username = 'wang'.rand(0,1000);

5 //生成唯一訂單

6 function build_order_no(){

7  return date('ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);

8 }

9 //記錄日誌

10 function insertLog($event,$type=0,$username){

11    global $conn;

12    $sql="insert into ih_log(event,type,usernma)

13    values('$event','$type','$username')";

14    return mysqli_query($conn,$sql);

15 }

16 function insertOrder($order_sn,$user_id,$goods_id,$sku_id,$price,$username,$number)

17 {

18      global $conn;

19      $sql="insert into ih_order(order_sn,user_id,goods_id,sku_id,price,username,number)

20      values('$order_sn','$user_id','$goods_id','$sku_id','$price','$username','$number')";

21      return  mysqli_query($conn,$sql);

22 }

23 //模擬下單操作

24 //庫存是否大於0

25 $sql="select number from ih_store where goods_id='$goods_id' and sku_id='$sku_id' ";

26 $rs=mysqli_query($conn,$sql);

27 $row = $rs->fetch_assoc();

28  if($row['number']>0){//高並發下會導致超賣

29      if($row['number']<$number){

30        return insertLog('庫存不夠',3,$username);

31      }

32      $order_sn=build_order_no();

33      //庫存減少

34      $sql="update ih_store set number=number-{$number} where sku_id='$sku_id' and number>0";

35      $store_rs=mysqli_query($conn,$sql);

36      if($store_rs){

37          //生成訂單

38          insertOrder($order_sn,$user_id,$goods_id,$sku_id,$price,$username,$number);

39          insertLog('庫存減少成功',1,$username);

40      }else{

41          insertLog('庫存減少失敗',2,$username);

42      }

43  }else{

44      insertLog('庫存不夠',3,$username);

45  }

46 ?>

❸ thinkphp怎麼生成唯一標識

1、md5(time() . mt_rand(1,1000000));
這種方法有一定的概率會出現重復

2、php內置函數uniqid()

uniqid() 函數基於以微秒計的當前時間,生成一個唯一的 ID.

w3school參考手冊有一句話:"由於基於系統時間,通過該函數生成的 ID 不是最佳的。如需生成絕對唯一的 ID,請使用 md5() 函數"。

3、官方uniqid()參考手冊有用戶提供的方法,結果類似:{E2DFFFB3-571E-6CFC-4B5C-9FEDAAF2EFD7}

public function create_guid($namespace = '') {
static $guid = '';
$uid = uniqid("", true);
$data = $namespace;
$data .= $_SERVER['REQUEST_TIME'];
$data .= $_SERVER['HTTP_USER_AGENT'];
$data .= $_SERVER['LOCAL_ADDR'];
$data .= $_SERVER['LOCAL_PORT'];
$data .= $_SERVER['REMOTE_ADDR'];
$data .= $_SERVER['REMOTE_PORT'];
$hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
$guid = '{' .
substr($hash, 0, 8) .
'-' .
substr($hash, 8, 4) .
'-' .
substr($hash, 12, 4) .
'-' .
substr($hash, 16, 4) .
'-' .
substr($hash, 20, 12) .
'}';
return $guid;
}

❹ php 隨機生成不重復用戶ID

php可以使用uniqid函數生成唯一的ID

uniqid — 生成一個唯一ID

stringuniqid([string$prefix=""[,bool$more_entropy=false]])

獲取一個帶前綴、基於當前時間微秒數的唯一ID。

參數說明:

prefix:有用的參數。例如:如果在多台主機上可能在同一微秒生成唯一ID。

prefix為空,則返回的字元串長度為13。more_entropy 為 TRUE,則返回的字元串長度為23。

more_entropy:如果設置為 TRUE,uniqid() 會在返回的字元串結尾增加額外的煽(使用combined linear congruential generator)。使得唯一ID更具唯一性。

返回值:

返回字元串形式的唯一ID。

❺ PHP 中iVBOR是什麼函數生成的

在PHP編程中,我們有時候在高並發的時候生成很多個不同的ID,用於標識一些東西。雖然有很多方法,可以實現這一過程,不過PHP還是給我們提供了一個很好的函數,用於生成不同的唯一的ID
PHP中的uniqid()函數
函數定義
uniqid() 函數基於以微秒計的當前時間,生成一個唯一的 ID。
語法
uniqid(prefix,more_entropy)

注釋:
prefix可選。為 ID 規定前綴。如果兩個腳本恰好在相同的微秒生成 ID,該參數很有用。
more_entropy 可選。規定位於返回值末尾的更多的熵。
舉例說明
利用uniqid()生成一個ID
<?php//XXXXX
echo '輸出一個唯一的ID標示符:'.uniqid();?>
echo '輸出一個唯一的CHAODIQUAN.COM 標示符:'.uniqid();?>
利用for循環與uniqid()函數,連續生成10個不同的ID標識
代碼
<?php//XXXXXXfor($i=1;$i<11;$i++){
echo '輸出第'.$i.'個標示符:'.uniqid().'<br/>';}?>

對於uniqid()函數補充

如果我們單純使用 uniqid()
這個方法,不帶任何參數的話,這個方法只能保證單個進程,在同一個毫秒內是唯一的。如果使用uniqid("", true)。
帶了一個墒值,自身已經有一個隨機的方式能保證生成的id的隨機性了。但是由於線性同餘是比較簡單的生成隨機數的演算法,隨機性有可能還不夠,所以,網上流傳的一種更隨機數值的方式是:
uniqid(mt_rand(), true)

其中
mt_rand() 生成隨機數就不是使用線性同餘生成隨機數的方式了,而是使用 Mersenne Twister Random Number
Generator (梅森旋轉演算法)。換句話說,上面這個 id 由兩種隨機演算法 +
時間戳生成。基本上,這個演算法在很大程度上能保證唯一性了(如果要問沖突率的話,估計只有數學系學生能研究出來了...)。
上面的這個給出的id會有一個點號,而且長度並不是128bit。如果希望生成uuid,就需要一個hash,不管是md5,sha1 都是可以選擇的。所以網上又有一種生成唯一碼的方式。
md5(uniqid(mt_rand(), true))
復制
但是,本質上,這兩種方式的隨機性是相等的。

閱讀全文

與phpuniqid高並發相關的資料

熱點內容
程序員那麼可愛陸漓和姜逸城吻戲 瀏覽:802
android獲取窗口大小 瀏覽:180
程序員為世界帶來的貢獻 瀏覽:214
程序員招聘自薦信 瀏覽:693
魔獸鍵位設置命令宏 瀏覽:645
程序員沒有目標了 瀏覽:828
搶答器c程序編程 瀏覽:703
什麼app可以自己玩 瀏覽:76
刨客app是什麼 瀏覽:963
cad輸入命令欄不見了 瀏覽:834
做故事集可以用什麼app 瀏覽:692
qq郵箱發送壓縮包 瀏覽:672
程序員桌面機器人 瀏覽:589
xjr快速開發平台源碼 瀏覽:159
java介面runnable 瀏覽:31
python怎麼運行web伺服器 瀏覽:349
notepad編程代碼 瀏覽:740
什麼安卓的毛病最少 瀏覽:611
hp的pjl設備訪問命令 瀏覽:635
googlewebp圖片壓縮技術 瀏覽:215