# http://o...content-available-to-author-only...e.jp/qa/7490552.html
$numeric = ('0' .. '9').to_a;
$alpha = ('a' .. 'z').to_a;
$cap = ('A' .. 'Z').to_a;
$char = %w" # $ % ( ) - = ^ ~ | @ ` [ ; : + * / ? ";
def r( letters, num_try )
c = [];
s = letters.dup;
num_try.times do
c << s.slice!( rand( s.length ) );
end
return c;
end
def check_passwd( pw )
return [ $numeric, $alpha, $cap, $char ].all? do |charset|
pw.any?{|c| charset.member?( c ) }
end;
end
max_pass_len = 8;
RND = Random.new;
for h in (1..100)
n_numeric = RND.rand( 1 .. max_pass_len - 3 );
n_alpha = RND.rand( 1 .. max_pass_len - 2 - n_numeric );
n_cap = RND.rand( 1 .. max_pass_len - 1 - n_numeric - n_alpha );
n_char = max_pass_len - n_numeric - n_alpha - n_cap;
pw = r( [ r( $numeric, n_numeric ),
r( $alpha, n_alpha ),
r( $cap, n_cap ),
r( $char, n_char ) ].flatten, max_pass_len );
print pw.join;
unless check_passwd( pw ) then
print " -> NG!\n"
exit 1;
end
print "\n";
end
IyBodHRwOi8vby4uLmNvbnRlbnQtYXZhaWxhYmxlLXRvLWF1dGhvci1vbmx5Li4uZS5qcC9xYS83NDkwNTUyLmh0bWwKCiRudW1lcmljID0gKCcwJyAuLiAnOScpLnRvX2E7CiRhbHBoYSA9ICgnYScgLi4gJ3onKS50b19hOwokY2FwID0gKCdBJyAuLiAnWicpLnRvX2E7CiRjaGFyID0gJXciICMgJCAlICggKSAtID0gXiB+IHwgQCBgIFsgOyA6ICsgKiAvID8gIjsKCmRlZiByKCBsZXR0ZXJzLCBudW1fdHJ5ICkKICBjID0gW107CiAgcyA9IGxldHRlcnMuZHVwOwogIG51bV90cnkudGltZXMgZG8KICAgYyA8PCBzLnNsaWNlISggcmFuZCggcy5sZW5ndGggKSApOwogIGVuZAogIHJldHVybiBjOwplbmQKCmRlZiBjaGVja19wYXNzd2QoIHB3ICkKICByZXR1cm4gWyAkbnVtZXJpYywgJGFscGhhLCAkY2FwLCAkY2hhciBdLmFsbD8gZG8gfGNoYXJzZXR8CiAgICBwdy5hbnk/e3xjfCBjaGFyc2V0Lm1lbWJlcj8oIGMgKSB9CiAgZW5kOwplbmQKbWF4X3Bhc3NfbGVuID0gODsKUk5EID0gUmFuZG9tLm5ldzsKZm9yIGggaW4gKDEuLjEwMCkKICBuX251bWVyaWMgPSBSTkQucmFuZCggMSAuLiBtYXhfcGFzc19sZW4gLSAzICk7CiAgbl9hbHBoYSA9IFJORC5yYW5kKCAxIC4uIG1heF9wYXNzX2xlbiAtIDIgLSBuX251bWVyaWMgKTsKICBuX2NhcCA9IFJORC5yYW5kKCAxIC4uIG1heF9wYXNzX2xlbiAtIDEgLSBuX251bWVyaWMgLSBuX2FscGhhICk7CiAgbl9jaGFyID0gbWF4X3Bhc3NfbGVuIC0gbl9udW1lcmljIC0gbl9hbHBoYSAtIG5fY2FwOwogIHB3ID0gciggWyByKCAkbnVtZXJpYywgbl9udW1lcmljICksCiAgICAgICAgICAgIHIoICRhbHBoYSwgbl9hbHBoYSApLCAKICAgICAgICAgICAgciggJGNhcCwgbl9jYXAgKSwKICAgICAgICAgICAgciggJGNoYXIsIG5fY2hhciApIF0uZmxhdHRlbiwgbWF4X3Bhc3NfbGVuICk7CiAgcHJpbnQgcHcuam9pbjsKICB1bmxlc3MgY2hlY2tfcGFzc3dkKCBwdyApIHRoZW4KICAgIHByaW50ICIgLT4gTkchXG4iCiAgICBleGl0IDE7CiAgZW5kCiAgcHJpbnQgIlxuIjsKZW5kCg==