電子書籍の厳選無料作品が豊富!

Perl5をつかっています。
毎回ランダムな英数字の何桁かの文字列を発生させるCGIを作りたいのですが可能なのでしょうか?
rand関数をつかうと乱数を発生はできるのはわかるのですが英文字ではないようなので困っています。
どなたかご教授おねがいします。

A 回答 (3件)

#まず配列を用意


@mozi=('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','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','1','2','3','4','5','6','7','8','9','0');

$max=@mozi;#配列の個数を代入
$get=int(rand($max));#個数までの乱数を取得
print"$mozi[$get]";#配列から引き抜き
    • good
    • 0

以前、そんなサブルーチンを作ったので。


方法としては#1さんの1番の方法を使っています。

&randstr(8); で8桁のランダムな文字列を、
&randstr(4,16);で4桁~16桁のランダムな文字列を返します。


sub randstr {
my ($colum1,$colum2) = @_;
$colum2 = $colum1 unless($colum2);
my @str = ('a'..'z','A'..'Z','0'..'9');
my $result;

my $colum = int rand($colum2 - $colum1 +1) + $colum1;
for(1..$colum) {
$result .= $str[ int rand(scalar @str) ];
}
return $result;
}
    • good
    • 0
この回答へのお礼

さらに詳しい説明ありがとうございます。
非常にわかりやすいです。

お礼日時:2005/07/04 17:35

1.使用する文字を1文字づつ配列に入れておき、ランダムで取得した数値をキーにして文字を取得する


2.ord関数で英数文字のasciiコードを得て、それにランダム値を加算し、chr関数で文字にする

こんな方法で可能かと思います。
    • good
    • 0
この回答へのお礼

返事が遅くなりました。
ありがとうございます。
試してみます。

お礼日時:2005/07/04 17:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!