昨晩は、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

posted by y_tsuda y_tsuda on Tue 4 Nov 2008 at 22:25 with 0 comments
Contents rssrss
Xperiaにインストールして1週間生き残ったアプリたち
gem serverをIE8から見るとヒドイことになる現象を解決
gem serverをIE8から見るとヒドイことに
Twitter, Account Suspended
GentooにRuby1.9をインストールした
GentooにScalaをインストールしてみた
多面ディスプレイ環境を手作りしてみた
lower-camel caseな文字列とアンダースコア区切りな文字列の相互変換をRubyで
topコマンドでのCPUコア毎の表示
Fedora11 (on VirtualBox) 速効レビュー
Tags
rubyGentooDIYFedoralinuxmemoScalatwitterunixvirtualboxweb
Comments rssrss
Aleksey Aleksey: The uname check is only due to a somewhat sloppy t... 02/02 07:03
Yu Tsuda Yu Tsuda: あぁ、そうですね、、syncすると戻ってしまいますね・・・。 ご指摘ありがとうございます!! 07/11 15:38
ursm ursm: /usr/portage 以下のファイルは更新のたび元に戻ってしまうので、/etc/portage/... 07/11 13:46
Yu Tsuda Yu Tsuda: 見た目だけでも、わざわざGentooをこういうリストに入れてるのがすごいなぁと思ったりしたのです(笑... 03/31 19:49
Leonard Chin (レオ) Leonard Chin (レオ): ただし、VirtualBoxで「Gentoo」などを選択しても、別にどのOSを入れても大丈夫だ。あく... 03/31 13:00
Yu Tsuda Yu Tsuda: この機能、結構便利なんですよねー。 またEmacsで便利な機能を見つけたらブログに書きまーす。 11/27 23:46
satoko satoko: 知らんかった!emacs派なのでうれしい。thanks! 11/27 12:08
satoko satoko: 他の記事も御苦労さまです!大変だけど、後で報われる(はず!)のでがんばってくださいませっ あとあと... 10/23 00:18