ユーザーIDから独自の招待コードを生成する方法

小云云
リリース: 2023-03-21 11:16:01
オリジナル
17442 人が閲覧しました

根据用户id生成与之对应的唯一邀请码,范围为‘0-9A-Z’。 この要件の焦点は、太字の部分にあります。つまり、ユーザー数が多い場合、招待コードをデータベースに保存する必要がないように、招待コードに基づいてユーザー ID を推定する必要があります。 、パフォーマンスを大幅に向上させることができます。

間違った考え

ランダムに文字列を生成し、その文字列の末尾にユーザー ID を接続しますが、この方法では ID が明白になりすぎて簡単に公開されてしまい、ID が非常に長い場合は招待コードが非常に長いため、ユーザーの使用には適していません。

そのため、生成された文字列にユーザー ID を挿入し、1 文字おきに ID 番号を挿入することができます。この方法では、ID が文字列に混在し、簡単には公開されません。ただし、長さの問題は最適化されていません。したがって、1 文字おきに挿入する ID の番号は、1 文字おきに 2 つの ID の番号を挿入するように変更されます。ただし、長さはあまり変わらないようです。

正解

考え: 10 進数は短いですか、それとも 16 進数ですか?
16 進数は比較的短いので、ユーザー ID を 10+26=36 の 16 進数に直接変換できるはずですよね?具体的なコードは次のとおりです:

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;
}
ログイン後にコピー

招待コードは一意性を確保しており、長すぎないため、招待コードに基づいてユーザー ID を推測することもできます。ただし、欠点は、他のユーザーも招待に基づいて user_id を推測できることです。したがって、いくつかの最適化を行う必要があります。

最適化

0を削除して補数記号として使用します。たとえば、招待コードが4桁未満の場合、上位ビットに0を追加して、36桁のシステムを35桁のシステムにします。その場合、文字列の順序がスクランブルされるため、$source_string がわかっている場合は、正しい user_id を解決する方法がありません。

コードは次のとおりです:

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;
}
ログイン後にコピー

このようにして、user_idに対応する固有の招待コードが生成され、デコード関数が付加されます:

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;
}
ログイン後にコピー

関連推奨事項:

phpはランダムな固有の招待コード/割引を生成しますコード固定長

以上がユーザーIDから独自の招待コードを生成する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート