• ベストアンサー

ランダム文字列

srand; @array = a .. z; @new; while ( @array ) { push( @new, splice(@array , rand @array , 1) ); } print @new, "\n\n"; print "<br>"; print @new, "\n\n"; print "<br>"; print @new, "\n\n"; ↑のような感じでランダム文字列の作成を考えています。 上記スクリプトですと、 aewpodigtusnkjycfxvmzqrlhb aewpodigtusnkjycfxvmzqrlhb aewpodigtusnkjycfxvmzqrlhb ↑のようにどの行も同一文字列になってしまいます。これを、行毎に異なった8文字のランダム文字列にしたいのですが、方法がわかりません。 いっぺんに100行のランダム文字列を生成する必要があります。どうぞよろしくお願いいたします。

  • MKNET
  • お礼率94% (89/94)
  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

> 行毎に異なった8文字のランダム文字列にしたい 行ごとにランダム文字列を新たに生成するようにしてください。 今のスクリプトだと、最初に文字列(配列?)を1つ生成して それを3回出力しているだけです。 また、今のままだと8文字ではなくてarrayの要素数分の長さになるので、 whileのループ回数を8回に変える必要があります。 以下はサンプルコード。 -------------------------------------------------------- srand; #文字数8の文字列を3行出力 for(my $i=0;$i<3;$i++){   print randstr(8)."\n"; } sub randstr($){   my $len = $_[0];  #文字数   my @alphabet = "a" .. "z";  #文字列に使用する文字群   my $str="";   for(my $i=0;$i<$len;$i++){     $str.=$alphabet[rand @alphabet];     #同じ文字を2回以上出現させたくないなら     #$str.=splice(@alphabet , rand @alphabet , 1);   }   return $str; }

MKNET
質問者

お礼

ご回答有難うございます。おかげ様で上手くいきました。あと一つお聞きしたいのですが、 $pass1 = 'ランダム文字列'; $pass2 = 'ランダム文字列'; $pass3 = 'ランダム文字列'; 以下$pass100までと、100個まで作りたいのですが、以下のように作成すればよろしいのでしょうか?1~100まで番号が付けられればと、$count 行番号で検索して調べてみましたが、どうもうまくいきませんでした。以下の方法でもやりたいことはできたのですが、素人のために、適当なやり方で以下のようにしてみたので、他に良い方法があればご教授いただけると幸いです。 for(my $i=0;$i<1;$i++){ print "\$pass1 = '"; print randstr(8)."';<br>\n"; } for(my $i=0;$i<1;$i++){ print "\$pass2 = '"; print randstr(8)."';<br>\n"; } for(my $i=0;$i<1;$i++){ print "\$pass3 = '"; print randstr(8)."';<br>\n"; } 以下$pass100まで。

その他の回答 (1)

  • asock
  • ベストアンサー率70% (7/10)
回答No.2

for(my $i=0;$i<1;$i++){ print "\$pass1 = '"; print randstr(8)."';<br>\n"; } これだと forループが$i=0のときの1回のみしか回っていないのでforの意味がありません。 "$passXX = 'alkerkjr' <br />"; と文字列を羅列表示するだけであれば#1さんのrandstrをお借りして以下のようにすればよいです。 for(my $i=1;$i<=100;$i++){ print "\$pass$i = '" . randstr(8). "';<br>\n"; }

MKNET
質問者

お礼

ご回答有難うございます。おかげ様で解決することができました。

関連するQ&A

  • cgiで文字列操作

    文字列$FILENAME1から★★より右側だけ取り出したいのですが、★★がない場合もあるので、 以下のようにしてみました。 -------------------- $FILENAME1 = "*****★★****"; print "文字列は「$FILENAME1」<BR><BR>\n"; $DIR = "★★"; $MOJISUU = length $DIR; print "探す文字列は「$DIR」<BR><BR>\n"; $position = index $FILENAME1,$DIR; print "$DIRの文字位置は「$position」<BR><BR>\n"; if ($position > 0){ $FILENAME = substr($FILENAME1,$position+$MOJISUU); print "$FILENAME<BR>\n"; } else { print "$FILENAME<BR>\n"; } -------------------- ★★が入ってる場合はうまくいくのですが、入っていない場合うまくいきません。 (結果が表示されない) どこを直したらいいのでしょうか?

  • [C#]2つのランダム文字列を作りたい

    いつもありがとうございます。 2種類のランダム文字列を作りたいのですが、 なぜか同じ文字列が作成されるという現象が起こります。 以下の関数を用意して public static string ランダム(int 桁数) { string[] codelist = new string[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "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" }; Random Random = new System.Random(); for (int i = 0; i < 桁数; i++) { randomcode += codelist[Random.Next(0, 36)]; } return randomcode; } textBox1.Text = ランダム(10); textBox2.Text = ランダム(10); とやっても、同じランダムの文字列が入ってしまいます。 間に、 Thread.Sleep(100); とか入れると変わるのですが・・・ 理由がわかりません。 初心者的質問ですみませんがよろしくお願いします。

  • パラメータをランダム文字列で表わしたい

    某サイトでリンクをクリックすると、下記のようにランダム文字列がパラメータとして渡されるものがあります。 http://www.foobar.jp/cgi-bin/abcd.cgi?a=10004414&b=PMird395j ランダム関数で生成?もしくは暗号化?しているのではないかと思うのですが、例えば商品番号などをそのままの数値でなく暗号化することができれば、セキュリティの向上にもつながるのではないかと思います。 このような文字列をPHPで簡単に生成する方法には、どのようなものがあるでしょうか。もちろん、文字列から元のIDや番号を復元できなければなりません。暗号化を使うのが良いのでしょうか。

    • ベストアンサー
    • PHP
  • 配列から網羅的な文字列を生成するには?

    perlの配列を使った、網羅的な文字列生成について質問です。 ある特定の種類の文字のレパートリをつかった、n文字の文字列すべての組み合わせを生成したいと考えています。 例えば文字 A, B, C の三種類をつかった2文字の文字列なら AA,AB,AC,BA,BB,BC,CA,CB,CC 3x3 =9 種類というふうになります。 n=2の場合、 @array = qw(A B C); foreach $moji(@array){ $moji1 = $moji; foreach $moji(@array){ $moji2 = $moji; $mojiretu = $moji1.$moji2; push (@mojiretuset , $mojiretu ); }} print @mojiretuset; とするとforeachをふたつ重ねることで文字の組み合わせすべてを生成できました。 問題なのは、問題なのは、今私がしたいのは文字数nを(ループの)外から指定して(例えば$mojisuu = 6 などとして)n文字の場合の網羅的な文字の組み合わせを生じさせることなのです。 毎回自分でforeachを必要なだけ重ねて書き直す、というのは現実的ではありませんし、n個のforeachの入ったperlのコードを書くコードというのも避けたいのです。 文字数を自由に後から設定して、特定の配列から網羅的な組み合わせを生じさせるにはどのようなコードを書けばよいでしょうか?

    • ベストアンサー
    • Perl
  • 1~100の数字の9の倍数だけ同じ文字、他はランダム

    教えてくださいm(__)m タイトルの通り、0~100の数字の9の倍数だけ同じ文字、他はランダムになるようにするにはどうやって組み立てたらいいのでしょうか? 0~100の数字のうち、9、18、27、36、45、54、63、72、81、90、99だけ同じ文字(例えばA)が表示されるようにしたいのです。でも更新するたび、ランダムに文字(例えばB)が変わります。 その数字は適当な文字(9の倍数以外の文字)がランダムに表示されます。 http://search.net-newbie.com/php/function.array-rand.html ↑のように「array_rand」を使えばいいと思うのですが・・よくわからず・・・(>0<) どういう風にプログラムを書いたらいいのでしょうか。 分かる方いましたら、お願いしますm(__)m

    • ベストアンサー
    • PHP
  • ランダム文字列の生成の仕方

    こんばんは。 はじめまして。 JAVAでランダムの文字列を生成する時に何か便利な機能はあるのでしょうか? CGIでは確かあったはずなんですが、 自分なりに探してみたのですがわかりませんでした。 今の自分の考えでは、ランダムで数字は生成できるので それをChar型を使って文字コードで一文字取得して、それを連結するのかな? なんて考えています。 もっといい方法があればできればご教授ください。 よろしくお願いします。

  • アルファベットを含むランダムな文字列を生成するには?

    通常の数字を用いた乱数を発生させるには OrderNo + Int(17 * Second(Time) * Rnd) :OrderNoはDB上にある注文番号の最終レコード値です という感じで、とりあえず適当にランダムな値を自動で生成させることができるのですが、 アルファベットなどの文字を含む場合のランダムな文字列の生成はどのようにすればよいのでしょうか? 感じできには、 UkB1PgMJ zK22fw2W N1np8zDb DbetjqKq Cj58pfYm というものです。 例は、小文字の[i][l][o]と大文字の[I][L][O]と数字の[0]を含まないランダムな文字列を8桁で生成しています。 (使用したソフトは、Fapsis氏のPassword Creator TypeB Ver3.5です) 具体的には何か関数で、このような文字列をランダムに発生させるものがあるのでしょうか?

  • ランダムな文字列を生成しその文字列をメール送信したいのですが・・・

    ランダムな文字列を生成し、その文字列をURLに組み込み、 そのURL自体をメール送信したいのですが、どうもうまく行きません。 恐らく初歩的な間違いをしているのだとは思いますが、 PHP 初心者ですのでどこがどう間違っているのか全くわかりません。 今やろうとしている事は ( 下記プログラム参照↓ ) 生成したランダムな文字列を $randam に代入し、 $randam を URL の中に取り込んで、これを $url に代入。 さらにこの $url をメール本文としてメール送信したいのですが うまく行きません。 どなたかアドバイス頂けませんでしょうか? 宜しくお願い致します。 今、作成している内容は以下の通りです。 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ## ランダムURLを生成 開始 ↓ -------------------------------------------- # * マイクロ秒により乱数器に種まき */ function make_seed() { list($usec, $sec) = explode(' ', microtime()); mt_srand((float) $sec + ((float) $usec * 100000)); } /** * パスワードを生成する * @param int $len パスワードの長さ * @param string $str パスワードに使う文字の並び * @return string パスワード */ function make_password($len, $str) { $l = strlen($str) - 1; $psw = ""; for ($i = 0; $i < $len; $i++) { $n = (int)mt_rand(0, $l); $psw = $psw . substr($str, $n, 1); //1文字追加 } return $psw; } $randam = make_password(10, "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"); $url = "http://●●●●●.com/$randam.html"; ## ランダムにURLを生成 終了 ↑ ------------------------------------ # ## 設定項目 開始 ↓ -------------------------------------------- # $mTo = $_POST[mail]; $user_id = $_POST[usr]; $password = $_POST[pass]; ## メールの件名 $mSub = 'Test Program'; ## メール本文 $mMes = '↓お申し込みの内容は以下の通りです。 '.$mTo.' '.$user_id.' '.$password.' '.$url.' ## 送信元アドレス $mFrom = 'mail@●●●●●.com'; ## 設定項目 終了 ↑ -------------------------------------------- # if (empty($mTo)) : ?> <?php else : $mFrom = "From: ".$mFrom."\nX-Mailer: PHP"; mail ($mTo, $mSub, $mMes, $mFrom); ?>

    • 締切済み
    • PHP
  • 10行単位の文字列をランダムに表示するには

    10行単位になっている文字群をランダムに表示したいのですが。 たとえば、文字列や数字の列、スクリプトなどが、10行単位でdata.txtに入っています。 ランダムに、その文字列を10行単位で表示する方法です。 こんな形で、呼び出し行を入れてブラウザに表示したいです。 <?php require("data.txt"); ?> 具体例でいいますと、強大なサイトを数名で作っていて、それぞれのアカウントのアドワース広告をランダムに表示したいなどという場合です。 ひとかたまり10行の広告が7つあれば、70行です。 それをランダムに10行単位で呼び出せば可能かと思うのですが。 バナーやテキストのランダム広告はたくさんありますが、今回のようなものは探してもないので、教えていただけるとありがたいです。 もちろんもっといい方法があれば歓迎です。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • ランダム表示文字について

    if ( open( IN,"hoge.txt" ) ) {   @line = <IN>;   close( IN ); } else {   exit; } $random1 = @line[rand(@line)]; $random2 = @line[rand(@line)]; $randam3 = @line[rand(@line)]; テキストファイルから1行文字をランダムに表示するプログラムを書き実行できたのですが、このままだとrandom1,2,3の変数に同じものが入ってしまう可能性があります。 これで全て違うものが入るようなプログラムを書きたいのですが、そのようなことは可能でしょうか?

    • ベストアンサー
    • CGI

専門家に質問してみよう