1

特定の(ユーザー、コード)ペアに固有の6文字の確認コード(A1JU2Zなど)を生成するアルゴリズムを作成できるようにしたいと思います。その理由は、コードを6文字のままにしておきたいのですが、(1やIなどとの混同を避けるために)トリミングされた英数字のセットを使用すると、衝突が発生するまでに最大3億のコードしか使用できません。確かに3億のコードは必要ないかもしれませんが、必要な場合は、戻ってこれを修正するのは非常に困難です。

それで、ユーザーを利用する方法はありますか...同じユーザーが別のコードを生成したい場合、それが彼らにとって一意であることが保証されるように、一般的な一意のコードにユーザー名を言いますか?(これはもちろん、1人のユーザーが300を超えるミルコードを生成しないことを前提としています)

ありがとう!

4

2 に答える 2

1

ID が現在のユーザーに対してのみ一意である場合は、ID の各文字をランダムに生成できます。ユーザーがそのような ID を大量に生成することが予想されない限り、同じ ID を 2 回以上生成する可能性は十分にあります (予想される衝突の可能性について正確な数値を取得するには、いくつかの計算を行う必要があります。生成される ID の数が増加します)。

絶対に衝突が発生してはならない場合は、以前に生成されたすべての ID を保持して新しい ID と比較するか、生成された ID の数を保持する必要があります (これには、ID 生成が決定論に基づくスキームが必要です)。数えますが、一意でもあります-非常に単純なケースは次のようになります{ID=count; ++count;})

于 2012-05-23T13:32:01.443 に答える
0

次のような単純なパスワード ジェネレータを使用できると思います: http://www.webtoolkit.info/php-random-password-generator.html

チェックアルゴリズムと組み合わせて、まだ使用されていないことを確認します。

$pass=generate_password();
$found=find_password($pass);
while($found){
    $pass=generate_password();
    $found=find_password($pass);
}
save_password($user,$code,$pass);

generate_password() は、リンクで参照されている関数です。find_password() は、データベースで既に生成されたコードをチェックするために作成する必要がある関数です。save_password() は、生成されたコードをデータベースに保存するために作成する必要がある関数です。

コードは PHP ですが、ロジックはここにあります。リンクのパスワードジェネレーターは理解しやすく、必要な文字ルールで6文字の長さを取得できます.

于 2012-05-23T13:10:39.073 に答える