首頁  >  文章  >  php框架  >  Laravel如何根據用戶id產生四位數唯一邀請碼

Laravel如何根據用戶id產生四位數唯一邀請碼

藏色散人
藏色散人轉載
2020-11-01 16:22:313790瀏覽

新建檔案app/Services/InviteCodeService.php

<?php namespace App\Services;// 邀请码服务class InviteCodeService{

    protected $key,$num;
    public function __construct()
    {
        $this->key = 'abcdefghjkmnpqrstuvwxyz123456789';
        // 注意这个key里面不能出现数字0  否则当 求模=0 会重复的

        // 多少进制
        $this->num = strlen($this->key);
    }

    // 传递用户id生成唯一邀请码
    public function enCode(int $user_id)
    {

        $code = ''; // 邀请码
        while ($user_id > 0) { // 转进制
            $mod = $user_id % $this->num; // 求模

            $user_id = ($user_id - $mod) / $this->num;
            $code = $this->key[$mod] . $code;
        }

        $code = str_pad($code, 4, '0', STR_PAD_LEFT); // 不足用0补充
        return $code;
    }


    // 邀请码获取用户id  一般都不需要用到
    function deCode($code)
    {

        if (strrpos($code, '0') !== false)
            $code = substr($code, strrpos($code, '0') + 1);
        $len = strlen($code);
        $code = strrev($code);
        $user_id = 0;
        for ($i = 0; $i key, $code[$i]) * pow($this->num, $i);
        return $user_id;
    }}

已綁定到容器看嗜好,如果不想綁定定就

new \App\Services\InviteCodeService

編輯

app/Providers/AppServiceProvider.php

<pre class="brush:php;toolbar:false">    use App\Services\InviteCodeService;     public function register()     {         $this-&gt;app-&gt;singleton('invite_code',InviteCodeService::class);     }</pre>

測試唯一性<pre class="brush:php;toolbar:false">      $max_num = 200000;         $codes = [];         for ($i = 1; $i enCode($i);         $i = 1;         foreach ($codes as $code){             $userId = app('invite_code')-&gt;deCode($code); // 邀请码获取用户id             if( $userId != $i)                 dd(&quot;邀请码解密错误&quot;.$i);             $i++;         }         $unique_count =  count(array_unique($codes));         dd($unique_count);  // 不重复的总数</pre>

#20w

資料是沒有重複的,並且邀請碼解

使用者id 也是正確的。

要注意的

$this->key 不能出現數字 0

  1. $this->key 不能有重複的字串。如: abccd  
  2. c
  3. 重複。 關於$this->key

#$this->key 順序可以打亂的,

// $this->key = 'abcdefghjkmnpqrstuvwxyz123456789'; // 没打乱的$this->key = 'kh8sjpdazetnmb5yw7rq4gc9fuv3216x'; // 打乱的
  1. $this->key 長度不限制, 但是最好別太短。

  2. abcd
  3. : 最大的

    用戶id 是4的3次方(256)超過256會怎麼樣?邀請碼變成5位元而已…. ,不好看。
    為使用者體驗,$this->key
    字串別加

    i
  4. o

    l 這些字母,因為容易混淆使用者。 i : l
    l : 1
    o : 0 (當然0
    是不能出現的)很相似。
    Ps

產生的邀請碼位數取決於

使用者id 可以被取模多少次。

範例假設

$this->key = abcd

 那就是4進位了。

如:使用者id

Laravel如何根據用戶id產生四位數唯一邀請碼#255

邀請碼4位數。

256 邀請碼5位數。
500 邀請碼5位數。
(所以對邀請碼位數有限定的話,聰明的你會懂的怎麼辦的吧)

32

進位邀請碼是4位最大用戶id是多少?

32^4 = 1048576

扯淡

Laravel如何根據用戶id產生四位數唯一邀請碼

因為要做邀請碼功能,第一反應:

###百度搜出來程式碼雖然能用,有重複,不理想,就改編別人程式碼了。 ######然後就有這篇文章了。 ###                             ###                

以上是Laravel如何根據用戶id產生四位數唯一邀請碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除