2

正確に長さ6(それ以下でもそれ以上でもない)の一意の非順次英数字文字列を生成する必要があります。非シーケンシャルとは、シーケンスからではなく、一見ランダムに見える必要があることを意味します(数日間の調査後にシーケンスを見つけることができるかどうかは関係ありませんが、一見ランダムに見えるはずです)。そして、それはユニークでなければならないことを覚えておいてください。また、すでに使用されているすべての番号を検索することもできません。

データベースに一意の数値を生成させ、その数値を正確に長さ6の一意の非順次英数字文字列に変換する関数を適用することを考えていました。ハッシュアルゴリズムの動作と似ていますが、衝突の可能性はありません。

私はこれを見つけました:http://blog.maxant.co.uk/pebble/2010/02/02/1265138340000.html しかし、シーケンスは視覚的にランダムではありません。

4

2 に答える 2

0

生成された文字列シーケンスをデータベース/ファイル/場所に登録することは可能ですか?次に、各位置(1から6)に対して、ランダムに文字を選択して6文字の文字列を作成する方法があります。そして、それが登録されたシーケンスの1つであるかどうかを確認します。すでに登録されている場合は、別のシーケンスを生成します。登録されていない場合は、生成されたものを登録して使用します。

于 2012-02-09T17:06:01.963 に答える
0

英数字で、あなたは目指していますか[A-Z0-9][a-zA-Z0-9]それとも[a-zA-Z0-9\+\\]受け入れられますか?後者の場合、チートし、一意のIDを適切に大きな値でXORしてから、Base64アルゴリズムを介してロット全体をスローし、作業を節約できます。

他の2つについては、単純な疑似乱数ジェネレーターの本から葉を取り出してください。次のような操作を実行してx = ((id + salt)*multiplier) mod pow(alphabet_size,6)から、整数xを英数字に「デコード」します。もちろん、良いものsaltを選ぶことmultiplierは重要です。後者は理想的には大きな素数であるか、少なくとも互いに素であるでしょうalphabet_size。はsaltゼロにすることもできますが、必要に応じて、出力のより美しい値から開始するために使用できます。

初期IDがを超えない限りpow(alphabet_size,6)、ハッシュは一意に元に戻すことができます。ハッシュを整数に変換し直してから、モジュラー除算アルゴリズムを使用して、を再取得(id + salt)し、したがって元のを再取得する必要がありますid

于 2012-02-09T17:15:20.397 に答える