Heim  >  Artikel  >  Backend-Entwicklung  >  So generieren Sie einen eindeutigen Einladungscode aus der Benutzer-ID

So generieren Sie einen eindeutigen Einladungscode aus der Benutzer-ID

小云云
小云云Original
2018-03-14 10:43:5117452Durchsuche

根据用户id生成与之对应的唯一邀请码,范围为‘0-9A-Z’。Der Schwerpunkt dieser Anforderung liegt im fettgedruckten Teil, das heißt, die Benutzer-ID muss anhand des Einladungscodes abgeleitet werden, sodass der Einladungscode nicht in der Datenbank gespeichert werden muss Da die Anzahl der Benutzer groß ist, kann die Leistung geringfügig verbessert werden.

Falsche Idee

Generieren Sie zufällig eine Zeichenfolge und fügen Sie dann die Benutzer-ID an das Ende der Zeichenfolge an. Auf diese Weise ist die ID jedoch zu offensichtlich und leicht offenzulegen, und wenn die ID sehr lang ist, führt dies dazu, dass der Einladungscode sehr lang ist und für die Verwendung durch den Benutzer nicht geeignet ist.

Damit die Benutzer-ID in die generierte Zeichenfolge eingefügt werden kann und bei jedem zweiten Zeichen eine ID-Nummer eingefügt werden kann, wird die ID auf diese Weise in die Zeichenfolge eingefügt und ist nicht leicht zugänglich Das Problem wurde nicht optimiert. Anstatt bei jedem zweiten Zeichen eine ID-Nummer einzufügen, fügen Sie bei jedem zweiten Zeichen zwei ID-Nummern ein. Die Länge scheint jedoch keinen großen Einfluss zu haben.

Richtige Antwort

Denken: Ist eine Dezimalzahl kürzer oder eine Hexadezimalzahl?
Das Hexadezimalsystem muss relativ kürzer sein, damit wir die Benutzer-ID direkt in 10+26=36 Hexadezimal umwandeln können, oder? Der spezifische Code lautet wie folgt:

function createCode($user_id)
{
    static $source_string = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $num = $user_id;
    $code = '';
    while($num)
    {
        $mod = $num % 36; 
        $num = ($num - $mod) / 36;
        $code = $source_string[$mod].$code;
    }
    return $code;
}

Der Einladungscode gewährleistet die Einzigartigkeit und ist nicht zu lang. Die Benutzer-ID kann jedoch auch anhand des Einladungscodes abgeleitet werden Es basiert auf dem Einladungscode. Der Einladungscode wird verwendet, um die Benutzer-ID abzuleiten. Daher müssen wir einige Optimierungen vornehmen.

Optimierung

Entfernen Sie 0 und verwenden Sie es als Komplementsymbol. Wenn der Einladungscode beispielsweise weniger als vier Ziffern hat, wird 0 zum oberen Bit hinzugefügt, sodass die 36-stellige Ziffer entsteht Das System wird zu einem 35-stelligen System, und dann wird die Reihenfolge der Zeichenfolge unterbrochen, sodass die korrekte Benutzer-ID ohne Kenntnis von $source_string nicht gelöst werden kann.

Der Code lautet wie folgt:

function createCode($user_id) {
    static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';
    $num = $user_id;
    $code = '';
    while ( $num > 0) {
        $mod = $num % 35;
        $num = ($num - $mod) / 35;
        $code = $source_string[$mod].$code;
    }
    if(empty($code[3]))
        $code = str_pad($code,4,'0',STR_PAD_LEFT);
    return $code;
}

Auf diese Weise wird der eindeutige Einladungscode entsprechend der Benutzer-ID generiert und eine Dekodierungsfunktion angehängt:

function decode($code) {
    static $source_string = 'E5FCDG3HQA4B1NOPIJ2RSTUV67MWX89KLYZ';
    if (strrpos($code, '0') !== false)
        $code = substr($code, strrpos($code, '0')+1);
    $len = strlen($code);
    $code = strrev($code);
    $num = 0;
    for ($i=0; $i < $len; $i++) {
        $num += strpos($source_string, $code[$i]) * pow(35, $i);
    }
    return $num;
}

Verwandte Empfehlungen:

PHP generiert zufällige, einzigartige Einladungscodes/Rabattcodes mit fester Länge

Das obige ist der detaillierte Inhalt vonSo generieren Sie einen eindeutigen Einladungscode aus der Benutzer-ID. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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