方案一、id生成器本身就是一个不重复的数字,但长度过长还不美观,不符合邀请码的常用形式;
$code = "{$userId}{$currentTime}";
方案二、再有就是生成一个随机数,再从数据库里面查询看是否存在。缺点就是需要链接查询数据库,数据量大时耗时比较久;
while(true){
//获取一个随机字符串
$code = getRandString(8);
//判断该字符串是否存在
if( ! checkExists($code))
return $code;
}
方案三、既然id是不会重复的数据,那么把id转换为36进制的字符串就好了。
function createCode($userId)
{
static $sourceString = [
0,1,2,3,4,5,6,7,8,9,10,
'a','b','c','d','e','f',
'g','h','i','j','k','l',
'm','n','o','p','q','r',
's','t','u','v','w','x',
'y','z'
];
$num = $userId;
$code = '';
while($num)
{
$mod = $num % 36;
$num = (int)($num / 36);
$code = "{$sourceString[$mod]}{$code}";//邀请码拼接
}
//判断code的长度
if( empty($code[4]))
str_pad($code,5,'0',STR_PAD_LEFT);//长度不够拼接'0'
return $code;
}