中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php如何生成字符串唯一不重復

發布時間:2021-07-05 09:20:23 來源:億速云 閱讀:146 作者:小新 欄目:編程語言

小編給大家分享一下php如何生成字符串唯一不重復,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

php生成字符串唯一不重復的方法:1、當前時間戳進行md5加密,截取前6位;2、使用數據庫bigint自增字段,轉成62進制縮短長度。

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

PHP怎么生成6位的不重復的字符串?

PHP生成6位的不重復的字符串(類似 UUID)

我們要考慮到:

1、不重復。
2、安全性。
【 不建議使用啥敏感的數據作為訂單生成規則(例如:用戶UID,訂單自增ORDER_ID等),以為會暴露網站一些敏感信息】

3、不能使用大規模隨機碼。

why?
  1. 首先問你"編程語言中的隨機能做到真隨機嗎?",我可以不自信的告訴你至少PHP做不到,所以可能導致第一個"不重復"原則發生

  2. 如果你的訂單數量到達了1000w次,你每次生成訂單編碼時就得對比1000w條歷史數據,一般在500w的時候,你得花時間在數據庫優化上(簡單處理:采用分區,建立索引,然而實際性要求高,可能需要在主數據庫下操作,可想你有多痛,當然對于數據庫實時讀寫還有其他的優化辦法,在此不作介紹)。

4、防止并發。
5、控制位數。
why?
1. 便于查詢檢索
2 位數控制到 10-20位即可,當然網上將的是10~15緣由是利于輸入,對于輸入太長做好用戶體驗就好(新增復制訂單按鈕)
6、盡量具有業務意義(不是強制的,根據公司業務來)
【當你業務比較龐大時候,或者后期有大規模的擴充時,建議考慮下訂單的生成意義,根據公司的業務做調整。舉個最簡單的例子:"一個賣化妝品的商城,你需要根據訂單來源來(pc/移動)來生成報表,這時候可能需要"】

7.解決辦法

// 類似生成 UUID ,不依賴外部流水號,完全靠時間戳和隨機數生成訂單號無法避免沖突,
// 所以必須引入外部的流水號生成機制。或使用數據庫,或使用APC之類的緩存。
// 用APC之類的緩存存在一個問題,就是無法持久保持數據,服務器重啟或者PHP宿主進程重啟都會清空流水號計數器,
// 所以可以采取緩存+數據庫結合的模式——如果緩存中有流水號計數器數據則讀取并累加計數,如果緩存中沒有流水號計數器從數據庫中還原計數器。
// 計數器可以每隔一段時間重置一次。既然引入了自增流水號計數器,又會導致文章開頭的“德國坦克問題”,
// 所以需要用skip32算法把流水號加密
// (https://github.com/nlenepveu/Skip32)。

// 訂單號 = 日期前綴 + 加密流水號

// Skip32 算法加密密鑰
const ENCRYPTED_KEY = 'xxxxxxxxxxxx';

// 使用 Wincache 作為流水號計數器緩存
function getOrderSerialNumber() {
    $timestamp = time();
    $datePrefix = date('ymd', $timestamp);
// 如果流水號計數器數據不在緩存中,則嘗試從數據庫中恢復
    if (false === ($value = wincache_ucache_inc($datePrefix))) {
    wincache_lock($datePrefix);
// 從數據庫中獲取今日的訂單數
    $counter = getNumberOfOrdersTodayFromDatabase($timestamp);
    $value = $counter + 1;
if (!wincache_ucache_add($datePrefix, $value, 60*60*24)) {
    $value = wincache_ucache_inc($datePrefix);
}
    wincache_unlock($datePrefix);
}
    return $datePrefix.str_pad(Skip32::encrypt($datePrefix.ENCRYPTED_KEY, $value), 10, '0', STR_PAD_LEFT);
}

簡單方式:

1.當前時間戳md5加密,截取前6位

echo substr(md5(microtime(true)), 0, 6);

2.使用數據庫bigint自增字段,轉成62進制縮短長度

echo gmp_strval(gmp_init('9876543210', 10), 62);

以上是“php如何生成字符串唯一不重復”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

东山县| 宣汉县| 溧阳市| 扶绥县| 凌源市| 乌鲁木齐县| 大理市| 潮安县| 临海市| 日土县| 常山县| 灵武市| 江阴市| 丰都县| 平安县| 武安市| 德清县| 淅川县| 阳春市| 弥渡县| 凤翔县| 武胜县| 定结县| 田林县| 泰和县| 桐城市| 元朗区| 合阳县| 孟津县| 闵行区| 和静县| 沅江市| 迁西县| 惠安县| 左贡县| 天台县| 黎平县| 赣榆县| 开阳县| 陵水| 庄河市|