Core classes

<?php

namespace app\lib;

class InviteCode
{
    const KEY = 'abcdefghjkmnpqrstuvwxyz123456789';
    const NUM = 32;

    //Pass the user id to generate a unique invitation code
    public static function enCode(int $user_id)
    {
        $code = ''; // invitation code
        while ($user_id > 0) { // convert to base
            $mod = $user_id % self::NUM; // modulo

            $user_id = ($user_id - $mod) / self::NUM;
            $code = self::KEY[$mod] . $code;
        }
        $code = str_pad($code, 4, '0', STR_PAD_LEFT); // Supplement with 0 if not enough
        return $code;
    }


    //Invitation code to get user id
    public static 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 < $len; $i++)
            $user_id += strpos(self::KEY, $code[$i]) * pow(self::NUM, $i);
        return $user_id;
    }

}

Test Results

20w data is not duplicated, and the invitation code decodes userid is correct

Precautions

  1. The number 0 cannot appear in KEY
  2. KEY cannot have duplicate strings
  3. The length of KEY is not limited, but it is best not to be too short
  4. KEY do not add i o l these letters, because it is easy to confuse users
点赞(0)

评论列表 共有 0 评论

暂无评论

微信服务号

微信客服

淘宝店铺

support@elephdev.com

发表
评论
Go
顶部