Heim > PHP-Framework > Laravel > Wie Laravel einen vierstelligen, einzigartigen Einladungscode basierend auf der Benutzer-ID generiert

Wie Laravel einen vierstelligen, einzigartigen Einladungscode basierend auf der Benutzer-ID generiert

藏色散人
Freigeben: 2020-11-01 16:22:31
nach vorne
3835 Leute haben es durchsucht

der einzige Einladungscode für Laravel vorgestellt, der einen vierstelligen Einladungscode entsprechend der Benutzer-ID generiert. Ich hoffe, dass er den Freunden, die ihn benötigen, hilfreich sein wird! Erstellen Sie eine neue Datei 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;
    }}
Nach dem Login kopieren

An den Container binden

Es hängt von Ihren Vorlieben ab. Wenn Sie keine Bindung wünschen, verwenden Sie einfach new AppServicesInviteCodeService. Bearbeiten Sie app/Providers/AppServiceProvider.php

    use App\Services\InviteCodeService;
    public function register()
    {
        $this->app->singleton('invite_code',InviteCodeService::class);
    }
Nach dem Login kopieren

new AppServicesInviteCodeService

编辑app/Providers/AppServiceProvider.php

      $max_num = 200000;

        $codes = [];
        for ($i = 1; $i enCode($i);

        $i = 1;
        foreach ($codes as $code){
            $userId = app('invite_code')->deCode($code); // 邀请码获取用户id

            if( $userId != $i)
                dd("邀请码解密错误".$i);
            $i++;
        }

        $unique_count =  count(array_unique($codes));
        dd($unique_count);  // 不重复的总数
Nach dem Login kopieren

测试唯一性

// $this->key = 'abcdefghjkmnpqrstuvwxyz123456789'; // 没打乱的$this->key = 'kh8sjpdazetnmb5yw7rq4gc9fuv3216x'; // 打乱的
Nach dem Login kopieren

20w 数据是没有重复的,并且邀请码解 用户id 也是正确的。

要注意的

  1. $this->key 不能出现数字 0
  2. $this->key 不能有重复的字符串。 如: abccd  c重复。

关于$this->key

  1. $this->key 顺序可以打乱的,

    rrreee
  2. $this->key 长度不限制, 但是最好别太短。
    abcd: 最大的 用户id 是4的3次方 (256)
    超过256会怎么样? 邀请码变成5位而已 ……. ,不好看。

  3. 为用户体验,$this->key 字符串别加 i o l 这些字母,因为容易混淆用户。
    i : l
    l : 1
    o : 0 (当然0 是不能出现的)
    很相似。

Ps

生成的邀请码位数 取决于 用户id 可以被 取模多少次。

假设$this->key = abcd  那就是4进制了。

Wie Laravel einen vierstelligen, einzigartigen Einladungscode basierend auf der Benutzer-ID generiert

如:用户id
255 邀请码4位数。
256 邀请码5位数。
500 邀请码5位数。
……

(所以对邀请码位数有限定的话,聪明的你会懂的怎么办的吧)

32 进制 邀请码是4位 最大用户id是多少?

32^4 = 1048576

Eindeutigkeit testen

rrreee

20w Die Daten werden nicht dupliziert und die Dekodierung des Einladungscodes Benutzer-ID ist ebenfalls korrekt.

Wie Laravel einen vierstelligen, einzigartigen Einladungscode basierend auf der Benutzer-ID generiertBitte beachten

  1. $this->key Die Zahl 0 darf nicht erscheinen.
  2. $this->key darf keine doppelten Zeichenfolgen enthalten. Beispiel: abccd c wird wiederholt.

Über $this->key

$this->key Die Bestellung kann gestört werden,

rrreee
  • 🎜$this->key Es gibt keine Begrenzung für die Länge, aber es ist am besten, nicht zu kurz zu sein.
    Beispiel: abcd: Die größte Benutzer-ID ist 4 hoch 3 (256)
    Was passiert, wenn sie 256 überschreitet? Der Einladungscode wird zu 5 Ziffern. Das ist alles... es sieht nicht gut aus. 🎜
  • 🎜Fügen Sie aus Gründen der Benutzererfahrung nicht i o l zum $this->keyhinzu > string Diese Buchstaben können Benutzer leicht verwirren.
    i : l
    l : 1
    o : 0 (Natürlich kann 0 nicht erscheinen)
    Sehr ähnlich. 🎜
  • 🎜🎜🎜Ps🎜🎜🎜Die Anzahl der generierten Einladungscodes hängt davon ab, wie oft die Benutzer-ID moduliert werden kann. 🎜🎜🎜🎜🎜Beispiel🎜🎜Angenommen $this->key = abcd Das ist 4-basig. 🎜🎜Laravel generiert einen vierstelligen eindeutigen Einladungscode basierend auf der Benutzer-ID 🎜🎜Zum Beispiel: Benutzer-ID
    255 4-stelliger Einladungscode.
    256 Der Einladungscode ist 5-stellig.
    500 Der Einladungscode ist 5-stellig.
    ...🎜🎜(Wenn es also eine Begrenzung für die Anzahl der Einladungscodes gibt, wissen Sie, was zu tun ist, wenn Sie schlau sind)🎜🎜🎜🎜32 Die maximale hexadezimale Einladung Der Code besteht aus 4 Ziffern. Wie lautet die Benutzer-ID? Obwohl der auf Baidu gefundene Code funktioniert, werde ich den Code einer anderen Person anpassen, wenn es zu Duplikaten kommt und er nicht ideal ist. 🎜🎜Dann gibt es diesen Artikel. 🎜                                                                                               

    Das obige ist der detaillierte Inhalt vonWie Laravel einen vierstelligen, einzigartigen Einladungscode basierend auf der Benutzer-ID generiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:learnku.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage