根据用户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.
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.
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!