2012-02-09 19 views
2

正確に長さ6のユニークな非連続英数字ストリングを生成する必要があります。 非連続的な意味では、最初の視界で視覚的に無作為に見え、シーケンスから来てはならないということを意味します(調査の日数の後にシーケンスを見つけることができるかどうかは関係ありません。 。 それは一意でなければならないことに留意してください。 既に使用されているすべての番号を検索することも実行できません。長さ6のユニークな非連続英数字ストリングを生成

私は、データベースに一意の番号を生成させ、その番号を正確に長さ6の一意の非連続英数字文字列に変換する機能を適用することを考えていました。ハッシュアルゴリズムの仕組みと同様ですが、 。

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

答えて

0

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

+0

システムがしばらく実行されていた場合は、再試行が必要です。 – user968698

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を英数字に「デコード」します。もちろん、良いsaltmultiplierを選択することは重要です。後者は、理想的には大きな素数であるか、少なくともalphabet_sizeと相性がよいでしょう。 saltはゼロにすることもできますが、必要に応じて出力のためのより美的な値で開始することができます。

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

関連する問題