!/usr/bin/perl use warnings; use strict; use utf8; use feature qw/say/; use constant DAYS => qw/0 31 28 31 30 31 30 31 31 30 31 30 31/; sub generate_rc { my $gender = shift; my $year = int rand 100; my $month = 1 + int rand 12; my $day = 1 + int rand((DAYS)[$month]); $month += 50 if $gender eq 'female'; $year += int rand 50 if $year < 50 and $year > 11; return sprintf '%02d%02d%02d/%04d', $year, $month, $day, rand 1000; } binmode STDOUT, ':utf8:crlf'; my %firstnames = ( male => [qw/Adam Cyril David František Gustav Ivan Jakub Jan Jaroslav Jiří Josef Karel Ladislav Lukáš Martin Michal Milan Ondřej Pavel Petr Radek Stanislav Tomáš Václav Vladimír Zdeněk/], female => [qw/Alena Anna Barbora Dana Eva Hana Helena Ivana Jana Jitka Karolína Kateřina Klára Lenka Libuše Lucie Marie Petra Radka Simona Věra Veronika Zdena Štěpánka/] ); my %surnames = ( male => [qw/Novák Staněk Bílý Zbořil Matějů Fučík Sedláček Svoboda Dvořák Černý Procházka Kučera Veselý Horák Němec Pokorný Pospíšil Hájek Jelínek Beneš Urban Blažek Musil Polák Kadlec Dostál Soukup Bureš Vacek/], female => [qw/Nováková Staňková Bílá Zbořilová Matějů Fučíková Sedláčková Svobodová Dvořáková Černá Procházková Kučerová Veselá Horáková Němcová Pokorná Pospíšilová Hájková Jelínková Benešová Urbanová Blažková Musilová Poláková Kadlecová Dostálová Soukupová Burešová Vacková/] ); my %rcs; for (1 .. $ARGV[0]) { my $gender = (keys %firstnames)[rand 2]; if ($ARGV[1] == 1) { say join ' ', $firstnames{$gender}[rand @{ $firstnames{$gender} } ], $surnames{$gender}[rand @{ $surnames{$gender} } ], generate_rc($gender); } elsif ($ARGV[1] == 2) { my $firstname = $firstnames{$gender}[rand @{ $firstnames{$gender} } ]; my $surname = $surnames{$gender}[rand @{ $surnames{$gender} } ]; my $middlename; if(1 > rand 500) { $middlename = $firstnames{$gender}[rand @{ $firstnames{$gender} } ] until length $middlename and $middlename ne $firstname; } my $rc = q{}; $rc = generate_rc($gender) while ! $rc or exists $rcs{$rc}; undef $rcs{$rc}; say $rc, ' ','"', $firstname, ' ', $middlename ? "$middlename " : q{}, $surname, '"'; } else { die qq{ARG[1] == 1: Firstname Surname RC\nARG[1] == 2: RC "Firstname(s) Surname"}; } }