n文字の半角英数文字列を生成する
昨晩は、n桁の16進数を生成しました。
今晩は、n文字のランダムな半角英数文字列を生成するRubyスクリプトを書いてみました。
ただ文字列を生成するだけだとあまり面白くないので、optparseを使ってオプションを取るようにしました。
以下、コード。
ruby>>
#/usr/bin/env ruby
require 'optparse'
def main(argv)
options = {}
option_parser = OptionParser.new {|opt|
opt.on('-l LENGTH', '--len LENGTH', 'Set password length'){|v| options[:l] = v}
opt.on('-a [OPTIONAL_CHARS]', '--add [OPTIONAL_CHARS]', 'Add optional characters'){|v| options[:a] = v}
opt.parse!(argv)
}
if options[:l]
puts mkpasswd(options[:l].to_i, (options[:a] || "").split(//))
else
puts option_parser
end
end
def mkpasswd(n, optional_chars)
passwd = ""
lower_chars = ("a".."z").to_a
upper_chars = ("A".."Z").to_a
numbers = ("0".."9").to_a
passwd_chars = (lower_chars + upper_chars + numbers + optional_chars).uniq
passwd_chars_size = passwd_chars.size
passwd = Array.new(n){ passwd_chars[rand(passwd_chars_size)] }.join
return passwd
end
main(ARGV)
<<ruby
使い方は、
ruby>>
$ ruby mkpasswd.rb
Usage: mkpasswd [options]
-l, --len LENGTH Set password length
-a, --add [OPTIONAL_CHARS] Add optional characters
<<ruby
で確認できます。
実際に使ってみます。
63文字の文字列を生成する
ruby>>
$ ruby mkpasswd.rb -l 63
qyXsKDICRoyweiA3MPVkC1Q2xXdY5uh00cxgWGrhj1b7HKvMwUNkpmSOG1QJTuk
<<ruby
-aオプションを使って, 記号を入れる
ruby>>
$ ruby mkpasswd.rb -l 63 -a _@!
My!n1WEYoc1R94JJW3X6JtmPKCJOjseWuubhH8R_bRo6bYnwAoKgSNzfyskv@RD
<<ruby
とまぁ、こんな感じです。
細かいところは気にせず自分用に書いたので、まだまだ改良する必要があります。
なんとなく、GitHub に置いてみました。
もしよければ使ってみてくださいm(_ _)m