PDA

Просмотр полной версии : генерация случайной строки на perl


genom--
18.04.2007, 23:25
вообщем пишу одинскрипт надо случайно ненерить строку текста -типо пароль рамдомный можно статистической длины но вида Wq1Ys` ну вы поняли из мусора всякого -- чето ничего кроме как взять массив символов и из него рамдомно выдирать символы и слепливать их в голову не приходит

посоветуйте наверняка есть чтонить покрасивее

Digimortal
18.04.2007, 23:44
так пойдет?

print rand_pass(16);

sub rand_pass
{
my $len = shift;
my $pass;
for (1..$len) {$pass .= chr(rand(94)+33)}
return $pass;
}

zl0y
18.04.2007, 23:54
<?php
function randomkeys($length)
{
$pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
$key = $pattern{rand(0,35)};
for($i=1;$i<$length;$i++)
{
$key .= $pattern{rand(0,35)};
}
return $key;
}
?>

blackybr
19.04.2007, 09:50
ф-ии

sub generatePassword {
$length = shift;
$possible = 'abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHJKLMNPQRS TUVWXYZ';
while (length($pass) < $length) {
$pass .= substr($possible, (int(rand(length($possible)))), 1);
}
return $pass
}

или
sub randomPassword {
my $pass;
my $_rand;

my $password_length = $_[0];
if (!$password_length) {
$password_length = 10;
}

my @chars = split(" ",
"a b c d e f g h i j k l m n o
p q r s t u v w x y z - _ % # |
0 1 2 3 4 5 6 7 8 9");

srand;

for (my $i=0; $i <= $password_length ;$i++) {
$_rand = int(rand 41);
$pass .= $chars[$_rand];
}
return $pass;
}

Digimortal
19.04.2007, 16:20
омг...
он же попросил красивое решение, а вы оба пишете то же самое, что он сам и придумал.. )

genom--
19.04.2007, 20:36
я сейчас прямо перед чтением ответов допер что через chr можно заделать -- а тут диджи даже и код готовый кинул спасиб =)

KSURi
20.04.2007, 23:03
use Digest::MD5;my@chars=(97..122);$str.=chr$chars[int rand scalar@chars]for(1..16);$str=Digest::MD5::md5_hex($str)

flipper
26.12.2007, 17:24
@chars = ( "A" .. "Z", "a" .. "z", 0 .. 9, qw(! @ $ % ^ & *) );
$password = join("", @chars[ map { rand @chars } ( 1 .. 8 ) ]);

genom--
26.12.2007, 21:24
археолог