使用連続番号、あなたはキーが既に存在するかどうかを検索するデータベースをヒットする必要はありませんので。今まで割り当てられた最大数を追跡するだけで済みます。
あなたが割り当てられた最初のIDは、その後000000
、000001
のように見えるだろうという事実を好きではない場合は36
をベースに、それを変換し、この順次IDの英数字を作るために、... 00000z
、000010
、。 ..、あなたは数学的なトリックを利用することができます:内部的には連続した数値IDを保持しますが、ユーザが見ることができる外部表現に対しては、それを36^6-1より小さい大きな素数で(mod 36^6) 1679979167は適切な選択です - ベース36に変換する前に。これはあなたのIDが実際にはなくてもランダムに表示されるようにします。
ここで出力のPythonサンプルです:
http://en.wikipedia.org/wiki/Linear_congruential_generator:この問題はよく知られているソリューションを有する
def baseN(num,b,numerals="abcdefghijklmnopqrstuvwxyz"):
return ((num == 0) and numerals[0]) or (baseN(num // b, b, numerals).lstrip(numerals[0]) + numerals[num % b])
for internalID in range(1,200):
mangled = (internalID*1679979167)%(36**6)
print internalID, mangled, baseN(mangled,36)
(ベイスンコードはhereからjellyfishtreeだ場合)
1 1679979167 rs7s7z
2 1183175998 jkfkfy
3 686372829 bcncnx
4 189569660 34v4vw
5 1869548827 ux2x3v
6 1372745658 mpapbu
7 875942489 ehihjt
8 379139320 69q9rs
9 2059118487 y1y1zr
10 1562315318 pu5u7q
11 1065512149 hmdmfp
12 568708980 9eleno
描画したい文字セットとは何ですか? – lurker
あなたは6人に限定されていますか?あるいは、「Xy0MVKupFES9NpmZ9TiHcw」のような22人がやりますか? –
重要な質問、なぜあなたはショートリンクサービスのための*ランダムなIDを持っている必要がありますか?連続する数値IDを生成し、選択した数字セットを使用してそれらを基数36に変換します。 – us2012