少なくとも4種類入ったパスワードを作成
要件定義
以下の種類が少なくとも1文字は存在するパスワードを作成する。
- 英大文字
- 英小文字
- 数字
- 記号(!,#,$,%,&,@,?,*,+,-)
実装
MyPassword.pm
package MyPassword; use strict; use warnings; my $DEFAULT_PASSWORD_LENGTH = 8; my @c = ('a'..'z'); # lower case my @C = ('A'..'Z'); # UPPER CASE my @d = ('0'..'9'); # a digit my @sym = ('!','#','$','%','&','@','?','*','+','-'); # symbol my $_qr_sym_join = join(q{}, @sym); my %qr = ( c => qr/[a-z]/, C => qr/[A-Z]/, d => qr/\d/, sym => qr/[$_qr_sym_join]/, ); my @passowrd_character_elements = (@c, @C, @d, @sym); sub create { my $len = shift || $DEFAULT_PASSWORD_LENGTH; MAKE_PASSWORD: while (1) { my $pw; $pw .= $passowrd_character_elements[int(rand(@passowrd_character_elements))] for 1 .. $len; # require all type char unless ( $pw =~ $qr{c} and $pw =~ $qr{C} and $pw =~ $qr{d} and $pw =~ $qr{sym}) { redo MAKE_PASSWORD; } return $pw; } } 1;
確認
$ perl -MMyPassword -E 'say MyPassword::create()' Dqo2#knC
いまさら?
不思議そうで不思議でないちょっと不思議な現場の話: ぼくと契約して新入社員になってよ!を見て、なんか晒したくなりましたyo!