Maison > cadre php > Laravel > Comment Laravel génère-t-il un code d'invitation unique à quatre chiffres basé sur l'ID utilisateur ?

Comment Laravel génère-t-il un code d'invitation unique à quatre chiffres basé sur l'ID utilisateur ?

藏色散人
Libérer: 2020-11-01 16:22:31
avant
3896 Les gens l'ont consulté

Créer un nouveau fichier app/Services/InviteCodeService.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

<a href="https://www.php.cn/phpkj/laravel/" target="_blank"><?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($codestrrpos($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;

    }}</a>

Lier au conteneurCela dépend de votre préférence, si vous ne souhaitez pas lier C'est tout

.

Edit

1

2

3

4

5

    use App\Services\InviteCodeService;

    public function register()

    {

        $this->app->singleton('invite_code',InviteCodeService::class);

    }

Copier après la connexion

new AppServicesInviteCodeService

Test d'unicité

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

      $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);  // 不重复的总数

Copier après la connexion
app/Providers/AppServiceProvider.php

Les données ne sont pas dupliquées , et la solution du code d'invitation

est également correcte.

Il est à noter que les 20w用户id

numéros ne peuvent pas apparaître.

    Il ne peut pas y avoir de chaînes en double. Par exemple :
  1. $this->key Répétez. 0
  2. $this->keyabccdÀ propos de $this->keyc

La commande peut être perturbée,

1

// $this->key = 'abcdefghjkmnpqrstuvwxyz123456789'; // 没打乱的$this->key = 'kh8sjpdazetnmb5yw7rq4gc9fuv3216x'; // 打乱的

Copier après la connexion

  1. Il n'y a pas de limite de longueur, mais il vaut mieux ne pas être trop court. $this->keyPar exemple,

     : Le plus grand
  2. est 4 élevé à la puissance trois (256). Que se passera-t-il si
  3. dépasse 256 Le code d'invitation ne comporte plus que 5 chiffres..., ce qui n'est pas le cas. Ça n'a pas l'air bien.

    $this->key
    abcd Pour l'expérience utilisateur, n'ajoutez pas 用户id

    à la chaîne
  4. car il est facile de confondre les utilisateurs.
  5. : $this->keyio : l
    i : l (Bien sûr,
    ne peut pas apparaître) l est très similaire. 1
    o00
    Ps

Le nombre de chiffres du code d'invitation générés dépend du nombre de fois

pouvant être modulé.

Exemple用户idSupposons

C'est la base 4.

Par exemple : $this->key = abcd

Code d'invitation à 4 chiffres. Comment Laravel génère-t-il un code dinvitation unique à quatre chiffres basé sur lID utilisateur ?

Code d'invitation à 5 chiffres.

用户idCode d'invitation à 5 chiffres.
......255
(Donc s'il y a une limite sur le nombre de codes d'invitation, vous saurez quoi faire si vous êtes malin)256
500

Hex Quel est l'ID utilisateur maximum d'un code d'invitation à 4 chiffres ?

32

Conneries

32^4 = 1048576Parce que je souhaitez utiliser la fonction code d'invitation, ma première réaction :

Bien que le code trouvé sur Baidu soit utilisable, il était répétitif et insatisfaisant, j'ai donc adapté le code des autres.

Ensuite, il y a cet article.

                                                                                                  

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal