在有些项目中需要生成邀请码,我们可以设定规则来获取可以解码的邀请码。
/**
*生成邀请码
*@param$userId
*@paramint$number
*@returnstring
*/
public static function createShareCode($userId, $number = 8)
{
static $sourceString = [0, 1, 2, 3, 4, 5, 7, 8, 9];
$num = $userId;
$code = '';
while ($num) {
$mod = $num % 4;
$num = (int)($num / 4);
$code = "{$sourceString[$mod]}{$code}";//邀请码拼接
}
//判断code的长度
if (strlen($code) < $number) {
$code = str_pad((string)$code, $number, '6',STR_PAD_RIGHT);
}
return $code;
}
/**
*反算邀请码ID
*@param$code
*@returnfloat|int
*/
public static function decode($code)
{
$sourceString = '012345789';
if (strrpos($code, '6') !== false) {
$code = substr($code, 0, strpos($code, '6'));
}
$len = strlen($code);
$code = strrev($code);
$num = 0;
for ($i = 0; $i < $len; $i++) {
$num += strpos($sourceString, $code[$i]) * pow(4, $i);
}
return $num;
}
?如果长度不够使用6来填充和解码,数字和字符可以自定义。
测试代码:
邀请码生成和解码分享... - 代码在线运行https://www.toolnb.com/dev/runCode/07de6523010090046e85e8af917a5b81.html
爱资料在线工具-好用的在线工具箱https://www.toolnb.com
|