以前のスクリプトを改良です。
スクリプト内容
- password_generate.rb
# パスワード生成関数
def generate_password(length, complexity, password_count, exclude_similar)
# 発行強度に応じた文字セットを選択
base_chars = {
1 => [('a'..'z'), (0..9)],
2 => [('a'..'z'), ('A'..'Z'), (0..9), ['!', '@', '#', '$', '%', '^', '&', '*']],
3 => [('a'..'z'), ('A'..'Z'), (0..9), ['!', '@', '#', '$', '%', '^', '&', '*'], ['-', '_', '=', '+', '<', '>', '?']]
}
chars = base_chars[complexity].map(&:to_a).flatten
# 見た目が似ている文字を除外
similar_chars = %w[i l 1 I o O 0 |]
chars -= similar_chars if exclude_similar
if chars.empty?
puts "文字セットが空です。条件を入力してください。"
return
end
# 指定された数のパスワードを生成
password_count.times do |i|
password = Array.new(length) { chars.sample }.join
puts "Password #{i + 1}: #{password}"
end
end
# 発行強度入力関数
def get_complexity
puts "発行強度を選択してください:\n"
puts "1: 小文字と数字のみ(例: a1b2c3)- 8文字\n"
puts "2: 小文字、大文字、数字、基本記号(例: Abc1@3)- 10文字\n"
puts "3: 小文字、大文字、数字、基本記号、追加記号(例: Ab1@-+?)- 12文字\n"
print "発行強度を1から3の範囲で入力してください (デフォルトは2): "
complexity_input = gets.chomp
complexity = complexity_input.empty? ? 2 : complexity_input.to_i
until (1..3).cover?(complexity)
print "有効な範囲で入力してください(1から3): "
complexity = gets.chomp.to_i
end
complexity
end
# パスワード数入力関数
def get_password_count
print "表示するパスワードの数を入力してください (デフォルトは4): "
count_input = gets.chomp
count = count_input.empty? ? 4 : count_input.to_i
count
end
# 見た目が似ている文字を除外するかの入力関数
def get_exclude_similar_option
print "見た目が似ている文字 (例: i, l, 1, 0) を除外しますか?(y/N): "
exclude_input = gets.chomp
%w[y Y].include?(exclude_input)
end
puts "パスワードを生成します。"
complexity = get_complexity
password_count = get_password_count
exclude_similar = get_exclude_similar_option
# 発行強度に応じたパスワード長を設定
length_by_complexity = { 1 => 8, 2 => 10, 3 => 12 }
password_length = length_by_complexity[complexity]
# パスワードを生成
generate_password(password_length, complexity, password_count, exclude_similar)
実行例
ruby password_generate.rb
パスワードを生成します。
発行強度を選択してください:
1: 小文字と数字のみ(例: a1b2c3)- 8文字
2: 小文字、大文字、数字、基本記号(例: Abc1@3)- 10文字
3: 小文字、大文字、数字、基本記号、追加記号(例: Ab1@-+?)- 12文字
発行強度を1から3の範囲で入力してください (デフォルトは2): 2
表示するパスワードの数を入力してください (デフォルトは4): 3
見た目が似ている文字 (例: i, l, 1, 0) を除外しますか?(y/N): n
Password 1: &o26_yTt/j
Password 2: LWn8byl8lO
Password 3: .7R2B/QVHI
として、対話的かつ柔軟なパスワードの生成が可能になりました。