Advertisement

php生成随机唯一推荐码/邀请码/优惠码 固定长度

阅读量:

认真生活、快乐工作 - 马云

懒惰象生锈一样,比操劳更能消耗身体。

------ 根据用户id生成与之对应的唯一邀请码,范围为‘0-9A-Z’。这个需求的重点在于加粗的部分,也就是要能够根据邀请码反推出用户ID,这样邀请码就不用入库了,在用户量很大的情况下,性能可以得到不小的提升。
< – . – >

具体实现代码如下:

复制代码
    public function mycode()
    {
        $code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $rand = $code[rand(0,25)]
            .strtoupper(dechex(date('m')))
            .date('d').substr(time(),-5)
            .substr(microtime(),2,6)
            .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 + 5 ] ) ) - $g & 0x1F ],
            $f++
        );
        return $d;
    }

经测试,基本不重复。如果高并发会出现极个别的重复。
可以通过查询数据库是否存在来避免

复制代码
    // 连接数据库
    require_once ('vendor/joshcam/mysqli-database-class/MysqliDb.php');
    $db = new MysqliDb (Array (
    'host' => '127.0.0.1',
    'username' => 'root',
    'password' => '123456',
    'db'=> 'test',
    'port' => 3306,
    'prefix' => '',
    'charset' => 'utf8'));
    
    $code = create_invite_code();
    
    $r = true;
    while($r) {
    $db->where("code", $code);
    $r = $db->has("table_code");
    if ($r) {
        $code = create_invite_code();
    }
    }
    
    echo $code;

如果存在,就重新生成一个,直到不重复,再保存。

其他生成唯一订单号方式:在tp6框架中的app/common.php文件中定义一个订单号方法

复制代码
    //生成订单号
    function xn_create_order_no()
    {
    $yCode = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J');
    $orderSn = $yCode[intval(date('Y')) - 2020] . strtoupper(dechex(date('m'))) . date('d') . substr(time(), -5) . substr(microtime(), 2, 5) . sprintf('%02d', rand(0, 99));
    return $orderSn;
    }

以上就是生成随机唯一推荐码的功能,有不对的地方可以下方评论或私我,多多益善。最后不妨给俺点个赞呗·

全部评论 (0)

还没有任何评论哟~