核心类
<?php
namespace app\lib;
class InviteCode
{
const KEY = 'abcdefghjkmnpqrstuvwxyz123456789';
const NUM = 32;
//传递用户id生成唯一邀请码
public static function enCode(int $user_id)
{
$code = ''; // 邀请码
while ($user_id > 0) { // 转进制
$mod = $user_id % self::NUM; // 求模
$user_id = ($user_id - $mod) / self::NUM;
$code = self::KEY[$mod] . $code;
}
$code = str_pad($code, 4, '0', STR_PAD_LEFT); // 不足用0补充
return $code;
}
//邀请码获取用户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;
}
}
测试结果
20w
数据是没有重复的,并且邀请码解 用户id
也是正确的
注意事项
1.KEY
不能出现数字0
2.KEY
不能有重复的字符串
3.KEY
长度不限制,但是最好别太短
4.KEY
别加 i
o
l
这些字母,因为容易混淆用户
发表评论 取消回复