根据用户id生成与之对应的唯一邀请码,范围为‘0-9A-Z’。
L'accent de cette exigence réside dans la partie en gras, c'est-à-dire que l'identifiant de l'utilisateur doit être déduit en fonction du code d'invitation, de sorte que le code d'invitation n'a pas besoin d'être stocké dans la base de données lorsque le numéro. du nombre d'utilisateurs est important, les performances peuvent être améliorées.
Générez aléatoirement une chaîne, puis collez l'ID utilisateur à la fin de la chaîne, mais de cette façon, l'ID est trop évident et facile à exposer, et si l'ID est très long, cela entraînera Le code d'invitation est très long et n'est pas propice à l'utilisation des utilisateurs.
Ainsi, l'identifiant de l'utilisateur peut être inséré dans la chaîne générée, et un numéro d'identification peut être inséré un caractère sur deux. De cette façon, l'identifiant est mélangé dans la chaîne et n'est pas facilement exposé. Cependant, la longueur. Le problème n'a pas été optimisé, donc au lieu d'insérer un numéro d'identification tous les deux caractères, insérez deux numéros d'identification tous les deux caractères. Cependant, la longueur ne semble pas beaucoup affectée.
Réflexion : un nombre décimal est-il plus court ou un nombre hexadécimal ?
Le système hexadécimal doit être relativement plus court, afin que nous puissions convertir directement l'ID utilisateur en 10+26=36 hexadécimal, n'est-ce pas ? Le code spécifique est le suivant :
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; }
Le code d'invitation garantit l'unicité et n'est pas trop long. L'identifiant de l'utilisateur peut également être déduit sur la base du code d'invitation. Cependant, l'inconvénient est que d'autres peuvent également l'utiliser. il est basé sur le code d'invitation. Le code d'invitation est utilisé pour dériver l'id_utilisateur, nous devons donc faire une certaine optimisation.
Optimisation
Supprimez 0 et utilisez-le comme symbole de complément. Par exemple, si le code d'invitation est inférieur à quatre chiffres, 0 est ajouté au bit haut, de sorte que les 36 chiffres. Le système devient un système à 35 chiffres, puis la chaîne L'ordre est perturbé, de sorte que le user_id correct ne peut pas être résolu sans connaître $source_string.
Le code est le suivant :
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; }
De cette manière, le code d'invitation unique correspondant à user_id est généré, et une fonction de décodage est attachée :
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; }
Recommandations associées :
php génère un code d'invitation/code de réduction unique aléatoire avec une longueur fixe
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!