Maison > développement back-end > tutoriel php > Comment générer un code d'invitation unique à partir de l'ID utilisateur

Comment générer un code d'invitation unique à partir de l'ID utilisateur

小云云
Libérer: 2023-03-21 11:16:01
original
17513 Les gens l'ont consulté

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

Mauvaise idée

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.

Bonne réponse

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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;
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal