Heim > Backend-Entwicklung > PHP-Tutorial > 用户邀请码的生成方法

用户邀请码的生成方法

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2016-07-28 08:26:54
Original
2193 Leute haben es durchsucht

最近由于现公司某些原因不得不重新投入到找工作的浪潮中。在面试过程中也遇到过一些比较有趣的面试题。可能当时没有想到,回来后自己又思考了下。题目一:已知一个用户的ID(ID是长整形)根据用户ID给用户生成一个唯一的邀请码(邀请码范围([a-z0-9])?代码实现!

当时思考的几种方案都比较简单:

<?php function createCode($userId)
    {
        //方案一:
        $currentTime = time();
        $code = "{$userId}{$currentTime}";
        return $code;

        //方案二:

        while(true){
            //获取一个随机字符串
            $code = getRandString(8);
            //判断该字符串是否存在
            if( ! checkExists($code))
                return $code;
        }
    }
Nach dem Login kopieren

当时想到的几种方案差不多都是按照这两种演变而来。

两种方案的缺点:

方案一:字符串长度过长,邀请码一般都是需要在用户之间进行传递。过长不利于用户记住。而且不优雅。呵呵。

方案二:每次生成随机字符串都需要去数据库中查找判断是否已经存在了。当用户基数庞大时,势必会影响效率。对于追求效率的开发者来说。这种方案也不是最佳的!

新的方案:

字符a-z0-9刚好是36个。是否可以考虑直接将用户ID转换成一个36进制的数呢?

代码实现:

<?php function createCode($userId)
{
    static $sourceString = [
              0,1,2,3,4,5,6,7,8,9,10,
              &#39;a&#39;,&#39;b&#39;,&#39;c&#39;,&#39;d&#39;,&#39;e&#39;,&#39;f&#39;,
              &#39;g&#39;,&#39;h&#39;,&#39;i&#39;,&#39;j&#39;,&#39;k&#39;,&#39;l&#39;,
              &#39;m&#39;,&#39;n&#39;,&#39;o&#39;,&#39;p&#39;,&#39;q&#39;,&#39;r&#39;,
              &#39;s&#39;,&#39;t&#39;,&#39;u&#39;,&#39;v&#39;,&#39;w&#39;,&#39;x&#39;,
              &#39;y&#39;,&#39;z&#39;
            ];

    $num = $userId;
    $code = &#39;&#39;;
    while($num)
    {
        $mod = $num % 36;
        $num = (int)($num / 36);
        $code = "{$sourceString[$mod]}{$code}";
    }
    
    //判断code的长度
    if( empty($code[4]))
        str_pad($code,5,&#39;0&#39;,STR_PAD_LEFT);

    return $code;
}
Nach dem Login kopieren

与前两种方案相比较新的方案弥补了前两种方案的缺点,同时保证同一个用户重复生成邀请码时不变的优点,当然这种实现方式还需要结合具体的需求来具体区别对待了。


以上就介绍了 用户邀请码的生成方法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage