長さを与えたらその長さ分のランダムな文字列を返す関数を作ってみる。
デフォルトでは英数62文字の中からランダムに文字選択される。
文字範囲は第2引数で指定できるようにもする。
rand-str.clj
(defn range-size
([start size] (range-size start size 1))
([start size step]
{:pre[(integer? size)]}
(take size (range start (+ start (* size step)) step))))
(defn rand-str
([n] (rand-str n (mapcat #(apply range-size %) [[48 10] [65 26] [97 26]])))
([n charseq] (apply str (map char (repeatedly n #(rand-nth charseq))))))
するとこんな感じでできた。
user=> (range-size 50 5)
(50 51 52 53 54)
user=> (rand-str 20)
"195Tbl1nE8ME0QGEwJl7"
user=> (rand-str 20 "abc")
"cbabbbcabbbaaaabcaca"