巧用 MD5 實現固定隨機數
前言
又要隨機又要固定?這是幾個意思。
比如說,手裡有一堆資料,要求各對應一個隨機數,我又懶得去存這個隨機數,那就要求隨機數可計算卻分佈無規律(偽隨機)
笨辦法
- 指定字串的 md5 值是唯一的。
- 不同字串的 md5 值之間是無規律的。
- 所以,給一個種子字串,從其 md5 值裡取出的數字,就是確定又無規律的。
- 這就是固定隨機數的基本邏輯啦。
程式碼
<?php /** * 固定隨機數 * @paramstring|intval $seed 初始化種子 * @paramintval$count複雜度 * @paramintval$min隨機數最小值 * @paramintval$max隨機數最大值 * @return intval最後剩餘的天數 */ function randRemind($seed,$count,$min,$max) { $seed = md5($seed); while ($count>0) { $count --; $seed = md5($seed); } $rand = intval(preg_replace('/.*?(\d).*?(\d).*/','$1$2',$seed)); return $min + intval(($max - $min) * $rand / 99); } echo randRemind('oBQsq7IckIGr',1,1,100),"<br/>"; echo randRemind('KLzlOmuuCKUv',102,1,100),"<br/>";
這也就是個思路分享,使用 sha1 什麼的類似編碼方案應該都可以得到這樣的效果哦。
順著這個思路,只要初始種子唯一,可以生成一系列的隨機數,用來作隨機戰鬥指令碼什麼的,也能這麼玩。
說來說去啊,就是懶得存變數,可以這麼幹。
後語
最近一個月的事兒有點多,比如換了工作什麼的,所以,後面更新部落格的頻率會下降。