在写一个项目 用户量比较大 要生成邀请码 考虑到用户输入方便 决定用6位 长度开始
然后查询数据库 如果查询10次 还是有重复的 说明生成的随机邀请码 已经重复率比较高了 这个时候 生成的邀请码长度+1
这是一个测试版本 初步跑了一下 没有问题 等数据量大之后 要测试问题
function get_invitation(){
$str = set_invitation();
$return_str = testing_single($str);
return $return_str;
}
function set_invitation($len = 6,$chars = null){
if (is_null($chars)) {
$chars = "abcdefghijklmnopqrstuvwxyz0123456789";
}
mt_srand(10000000 * (double)microtime());
for ($i = 0, $str = '', $lc = strlen($chars) - 1; $i < $len; $i++) {
$str .= $chars[mt_rand(0, $lc)];
}
return $str;
}
function testing_single($str,$i=0,$len = 6){
//这里查询了数据库 是否有重复 数据
$ret = db('user')->where(['invitation'=>$str])->find();
if (!$ret) {
return $str;
}else{
$i +=1;
if ($i<10) {
$str = set_invitation();
$return_str = testing_single($str,$i);
return $return_str;
}else{
$str = set_invitation($len+1);
$return_str = testing_single($str,$i,$len+1);
return $return_str;
}
}
}
对了 要注意 数据库中 给 邀请码字段 加索引 方便快速查询