• ベストアンサー

ランダムな英数字を発生させてたいのですが

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

質問者が選んだベストアンサー

  • ベストアンサー
  • mobt
  • ベストアンサー率50% (7/14)
回答No.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]";#配列から引き抜き

その他の回答 (2)

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

以前、そんなサブルーチンを作ったので。 方法としては#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; }

volvo850love
質問者

お礼

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

回答No.1

1.使用する文字を1文字づつ配列に入れておき、ランダムで取得した数値をキーにして文字を取得する 2.ord関数で英数文字のasciiコードを得て、それにランダム値を加算し、chr関数で文字にする こんな方法で可能かと思います。

volvo850love
質問者

お礼

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

関連するQ&A

専門家に質問してみよう