Laravel-生成唯一固定長度邀請碼

lanffff發表於2019-04-23

前段時間有朋友反饋存在重複情況,所以仔細想了一下可以使用遞迴函式進行二次排查的方法來解決這個問題,以laravel框架為例。
第一步在控制器中生成驗證碼。

//呼叫模型  生成邀請碼 
$dealer=new Dealer;
$code=$this->getcode($dealer);
//控制區內的私有方法呼叫模型內方法
    private function getcode($model) {
        $code = $model->CreateCode();
        //把接收的邀請碼再次返回給模型
        if ($model->recode($code)) {
        //不重複 返回驗證碼
            return $code;
        } else {
        //重複 再次生成
            while(true) {
                $this->getcode($model);
            }
        }
    }
 /**
     * 模型內生成邀請碼 並返回控制器
     * @param $uid
     * @return string
     */
    public function CreateCode() {
        $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $rand = $code[rand(0,25)]
            .strtoupper(dechex(date('m')))
            .date('d').substr(time(),-5)
            .substr(microtime(),2,5)
            .sprintf('%02d',rand(0,99));
        for(
            $a = md5( $rand, true ),
            $s = '0123456789ABCDEFGHIJKLMNOPQRSTUV',
            $d = '',
            $f = 0;
            $f < 6;
            $g = ord( $a[ $f ] ),
            $d .= $s[ ( $g ^ ord( $a[ $f + 8 ] ) ) - $g & 0x1F ],
            $f++
        );
        return $d;
    }
 /**
     * 判斷驗證碼是否存在資料庫中  
     */
    public function recode($code) {
        if ($this->where('code','=',$code)->first()) {
            return false;
        }
        return true;
    }
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章