昨天開發一個產品要求由網站總后臺生成一個注冊碼/序列號,然后我們以573-225-374-118這種格式生成,并且不重復在數據庫是唯一的,下面我把我找到的與自己寫的都記錄一下。
原理,就是生成mt_rand隨機種子來生成,然后利用相關函數進行讀取操作.
例1代碼如下:
- /**
- * 序列號生成器
- */
- function snMaker($pre = '') {
- $date = date('Ymd');
- $rand = rand(1000000,9999999);
- $time = mb_substr(time(), 5, 5, 'utf-8');
- $serialNumber = $pre.$date.$time.$rand;
- // echo strlen($serialNumber).'<br />';
- return $serialNumber;
- }
- echo snMaker();
- /**
- * 將一個字符串的一部分替換成某一特定字符
- * @param str or int $str 需要處理的字符串
- * @param str or int $to 將替換成什么字符串
- * @param int $start 保留前幾個字符
- * @param int $end 保留后幾個字符
- */
- function hideString($str = 'hello', $to = '*', $start = 1, $end = 0) {
- $lenth = strlen($str) - $start - $end;
- $lenth = ($lenth < 0) ? 0 : $lenth;
- $to = str_repeat($to, $lenth);
- $str = substr_replace($str, $to, $start, $lenth);
- return $str;
- }
- echo hideString();
例2,生成注冊碼/序列號,以下為引用的內容,代碼如下:
- <?php
- /* 配置 */
- $key_sum = 1500; //CD-Key最大數量,防止重復值
- $key_total = 1000; //最終需要的CD-Key數量
- $limiter = "-"; //CD-Key每組數字之間的連接符
- $save_file = "./cd_key.txt"; //保存CD-Key文件
- $num_file = "./number.txt"; //序列數字文件
- $file = file($num_file); //打開序列數文件
- $start_num = 0; //最小隨機數
- $end_num = count($file); //最大隨機數
- /* 生成隨機數字串 */
- $cdkey = array();
- for ($i=0; $i<$key_sum; $i++)
- {
- $key_str = $file[rand_num($start_num, $end_num)].$limiter.
- $file[rand_num($start_num, $end_num)].$limiter.
- $file[rand_num($start_num, $end_num)].$limiter.
- $file[rand_num($start_num, $end_num)];
- $cdkey[] = str_replace("rn", "", $key_str);
- }
- /* 過濾重復串并且提取最終需要的CD-Key數量 */
- $cdkey = array_unique($cdkey);
- $key_result = array();
- for ($i=0; $i<$key_total; $i++)
- {
- $key_result[] = $cdkey[$i];
- }
- /* 把最終的CD-Key寫入文件 */
- $fp = fopen($save_file, "w+") or die("Open $save_file failed");
- fwrite($fp, implode("rn", $key_result)) or die("Write $save_file failed");
- unset($cdkey);
- unset($$key_result);
- fclose($fp);
- echo "Create $key_total key succeed!";
- /* 隨機函數 */
- function rand_num($start, $end)
- {
- return mt_rand($start, $end);
- }
- ?>
執行上面的程序就會生成cd_key.txt文件,里面包含了類似下面的驗證碼,以下為引用的內容:
573-225-374-118,691-553-280-280,969-594-607-211,251-575-776-563,280-289-739-533...
這樣,就完整的達到了我們的目的,你也可以把以上隨機串保存到數據庫里,方便調用,靈活設置以上變量,你能夠生成16位、20位的驗證碼,如果你有興趣,也可以寫類似 XDF8F-ADE89-D0J5C-4RTFG之類的驗證碼
新聞熱點
疑難解答