rubyで衝突しないユニークな文字列を生成するには?
def uniqid()
def dec62(num)
table = [('0'..'9'),('a'..'z'),('A'..'Z')].map{|c| c.to_a }.flatten
num > 61 ? dec62(num/62)+table[num%62] : table[num%62]
end
dec62(Time.now.instance_eval { self.to_i * 1000 + (usec/1000) })
end
ユーザがアップロードしたファイルのファイル名を決定する際、ファイル名が衝突しないように
現在時刻(ミリ秒)からIDを発行するという方法を思いつきました。
色々ためしてみて、上記のコードが完成したのですが、現在時刻の数値を62進数に変換しただけなので
「p2dhXa6」や「p2d9Wco」のようにファイルの先頭文字がほぼp2で固定されてしまいます。
このままでも良いのですが、ファイル名で利用出来る文字を使って、衝突しないユニークかつ視覚的にもランダムであり、文字列長がより短いIDを生成する方法はございますでしょうか。