為什么使用php里面的json?
因?yàn)椋e例來(lái)說(shuō),如果你使用一個(gè)數(shù)組來(lái)存儲(chǔ)數(shù)組編號(hào),并希望將數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)庫(kù)中,數(shù)組可以不要儲(chǔ)存。你需要把它轉(zhuǎn)換成一個(gè)json字符串,所以你需要使用一個(gè)json字符串。
如何使用PHP生成隨機(jī)字符串?
我們可能經(jīng)常使用邀請(qǐng)碼、郵件驗(yàn)證碼,或者需要使用一個(gè)唯一的字符串來(lái)標(biāo)記用戶屬性。
今天,讓我們我們不談先進(jìn)的發(fā)電計(jì)劃全球唯一ID"。讓讓我們來(lái)討論一個(gè)簡(jiǎn)單的方法來(lái)生成一個(gè)獨(dú)特的,隨機(jī)的,數(shù)組字母串。
學(xué)習(xí)時(shí)間PHP有一個(gè)內(nèi)置函數(shù)uniqid,用來(lái)生成一個(gè)唯一的id。功能結(jié)構(gòu)形式:
stringuniqid([string$prefix[,bool$more_entropyfalse]])
用于根據(jù)當(dāng)前時(shí)間的微秒數(shù)獲取帶有前綴的唯一ID。
但是,這種方法生成的ID并不安全,根據(jù)本地時(shí)間戳的不同,有可能在相同的微秒內(nèi)生成相同的ID。所以為了安全起見(jiàn),需要添加prefix參數(shù)來(lái)顯示區(qū)別。
more_entropy參數(shù)使生成的ID更加唯一。如果設(shè)置為TRUE,uniqid()將在返回的字符串末尾添加一個(gè)額外的扇形(使用組合線性全等生成器)。
夠了嗎?這當(dāng)然不是最佳解決方案。我們嘗試其他解決方案。openssl帶來(lái)的加密和唯一性。
bin2hex(OpenSSL_random_pseudo_bytes($bytes))
使用openssl_random_pseudo_bytes函數(shù)生成偽隨機(jī)字符串的字節(jié),然后使用bin2hex將其格式化為十六進(jìn)制字符串。
生成的偽隨機(jī)字節(jié)數(shù)由長(zhǎng)度參數(shù)決定。它還指示是否使用具有強(qiáng)加密功能的算法來(lái)生成偽隨機(jī)字節(jié),該操作通過(guò)可選的crypto_strong參數(shù)來(lái)執(zhí)行。在極少數(shù)情況下,此方法返回的參數(shù)會(huì)顯示為假。
美中不足的是,這樣生成的數(shù)字串只有[0-9][a-z]之間,不夠廣泛。我們?cè)噲D加強(qiáng)這種生成方法,提高其健壯性。
上面的函數(shù)會(huì)生成一個(gè)隨機(jī)數(shù),間隔為[$min,$max]。然后調(diào)用這個(gè)函數(shù)生成一個(gè)指定長(zhǎng)度的字符串。
函數(shù)crypto_rand_secure函數(shù)實(shí)現(xiàn)方法,在PHP標(biāo)準(zhǔn)函數(shù)中,可以用rand/mt_rand函數(shù)代替。
在PHP7中,系統(tǒng)提供了更好的功能。可以用來(lái)代替crypto_rand_secur:_)
我是@程序員的助手,我繼續(xù)分享我的編程知識(shí)。歡迎關(guān)注。