>백엔드 개발 >PHP 튜토리얼 >사용자 초대 코드 생성 방법

사용자 초대 코드 생성 방법

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-07-28 08:26:542200검색

최근에 현재 다니고 있는 회사의 사정으로 인해 다시 취업활동에 들어가게 되었습니다. 면접 과정에서 흥미로운 면접 질문도 접했습니다. 아마 그 당시엔 별 생각이 없었을지 모르지만, 돌아와서 다시 생각하게 됐어요. 질문 1: 사용자 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;
        }
    }

당시 제가 생각한 여러 옵션은 거의 모두 이 두 가지 단점에서 발전했습니다. 두 가지 옵션 중

옵션 1: 문자열 길이가 너무 길어서 일반적으로 사용자 간에 초대 코드를 전달해야 합니다. 이는 사용자의 기억에 도움이 되지 않으며 우아하지도 않습니다.

옵션 2: 임의의 문자열을 생성할 때마다 데이터베이스에서 검색하여 이미 존재하는지 확인해야 합니다. 사용자 기반이 클 경우 이 솔루션은 효율성을 추구하는 개발자에게는 적합하지 않습니다.

새로운 솔루션:

a-z0-9 문자는 정확히 36자입니다. 사용자 ID를 36자리 숫자로 직접 변환하는 것이 가능한가요? >

코드 구현:

처음 두 솔루션에 비해 최신 솔루션은 처음 두 솔루션의 단점을 보완하는 동시에 동일한 사용자가 반복적으로 생성하는 경우 초대 코드가 변경되지 않도록 보장합니다. 물론, 이 구현 방법은 특정 요구 사항에 따라 다르게 취급되어야 합니다.
<?php
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);

    return $code;
}

위 내용을 포함하여 사용자 초대 코드 생성 방법을 소개했는데, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다.


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.