パスワード生成

昨今のインターネットでは、何をするにもパスワードを求められたりするものです。
考えるのがめんどくさいという場合の為のパスワード生成プログラムを考えてみましょう。
*なお、このプログラムを使って作られたパスワードを使用して何らかの問題が起きたとしても、私は責任が取れませんので、一応……w

パスワードというと通常は、アルファベット(小文字26文字、大文字26文字)と0〜9の数字を使うものが多いですが、中には「記号も混ぜる」とか「数字を必ず入れる」とか、色々な制限もあったりしますね。
まず、そういった制限は横に置いて、アルファベットと数字から8文字のランダムな文字を選んでパスワードを作るプログラムを考えてみましょう。
ランダムに何かを選ぶといえば、毎度お約束の、
Math.GetRandomNumber(maxNumber)
を使います。
アルファベット(小文字26文字、大文字26文字)と数字0〜9だと、選べる文字は合計で26+26+10=62です。
Math.GetRandomNumberで選ぶ数字に対して、それぞれ文字を割り振っておきましょう。

passmoji = "1=a;2=b;3=c;4=d;5=e;6=f;7=g;8=h;9=i;10=j;11=k;12=l;13=m;14=n;15=o;16=p;17=q;18=r;19=s;20=t;21=u;22=v;23=w;24=x;25=y;26=z;27=A;28=B;29=C;30=D;31=E;32=F;33=G;34=H;35=I;36=J;37=K;38=L;39=M;40=N;41=O;42=P;43=Q;44=R;45=S;46=T;47=U;48=V;49=W;50=X;51=Y;52=Z;53=0;54=1;55=2;56=3;57=4;58=5;59=6;60=7;61=8;62=9;"

これは配列の表記方法です。
passmoji[1]にa、passmoji[2]にb、……passmoji[61]に8、passmoji[62]に9、と設定しましたよという配列になります。

あとは、

passmoji[Math.GetRandomNumber(62)]

を8回繰り返して結果を並べるだけです。

GraphicsWindow.Title = "パスワード生成"
GraphicsWindow.Width = 300
GraphicsWindow.Height = 200

GraphicsWindow.BrushColor = "Black"
GraphicsWindow.FontSize = 16

passmoji = "1=a;2=b;3=c;4=d;5=e;6=f;7=g;8=h;9=i;10=j;11=k;12=l;13=m;14=n;15=o;16=p;17=q;18=r;19=s;20=t;21=u;22=v;23=w;24=x;25=y;26=z;27=A;28=B;29=C;30=D;31=E;32=F;33=G;34=H;35=I;36=J;37=K;38=L;39=M;40=N;41=O;42=P;43=Q;44=R;45=S;46=T;47=U;48=V;49=W;50=X;51=Y;52=Z;53=0;54=1;55=2;56=3;57=4;58=5;59=6;60=7;61=8;62=9;"

passsyuturyoku = Controls.AddTextBox(1,50)

passseisei = Controls.AddButton("パスワード生成",1,1)
Controls.ButtonClicked = passwordseisei

Sub passwordseisei
  If Controls.LastClickedButton = passseisei Then
    For i = 1 To 8
      passw[i] = passmoji[Math.GetRandomNumber(62)]
    EndFor
    password = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8]
    Controls.SetTextBoxText(passsyuturyoku, password)
  EndIf
EndSub

パスワード

パスワードの出力先をテキストボックスにしたのは、生成したパスワードを簡単にコピーできるようにするためです。
パスワード生成ボタンを連打すれば新しいパスワードがどんどん作れます。
ただ、これだと8文字のパスワードしか作れませんし、最初に書いたような、最近よくある「数字や記号を必ず1文字は混ぜてください」みたいなパスワードが作れません。
ここに、色々とオプションを付けてみましょう。
まず、オプション関係の見た目を追加します。

GraphicsWindow.Title = "パスワード生成"
GraphicsWindow.Width = 640
GraphicsWindow.Height = 300

GraphicsWindow.BrushColor = "Black"
GraphicsWindow.FontSize = 16
GraphicsWindow.FontName = "メイリオ"

passmoji = "1=a;2=b;3=c;4=d;5=e;6=f;7=g;8=h;9=i;10=j;11=k;12=l;13=m;14=n;15=o;16=p;17=q;18=r;19=s;20=t;21=u;22=v;23=w;24=x;25=y;26=z;27=A;28=B;29=C;30=D;31=E;32=F;33=G;34=H;35=I;36=J;37=K;38=L;39=M;40=N;41=O;42=P;43=Q;44=R;45=S;46=T;47=U;48=V;49=W;50=X;51=Y;52=Z;53=0;54=1;55=2;56=3;57=4;58=5;59=6;60=7;61=8;62=9;63=+;64=-;65=/;66=!;67=#;68=_;69=^;70=*;71=@;72=~;"

GraphicsWindow.DrawText(1, 1, "パスワードの文字数       8       12")
GraphicsWindow.DrawText(160, 1, Text.GetCharacter(9745))
GraphicsWindow.DrawText(212, 1, Text.GetCharacter(9744))
mojikazu = 8

GraphicsWindow.DrawText(1, 30, Text.GetCharacter(9744))
GraphicsWindow.DrawText(22, 30, "数字が1文字以上混ざったパスワードを生成する")
jouken1 = 0

GraphicsWindow.DrawText(1, 60, Text.GetCharacter(9744))
GraphicsWindow.DrawText(22, 60, "記号「+-/!#_^*@~」が1文字以上混ざったパスワードを生成する")
jouken2 = 0

GraphicsWindow.DrawText(1, 90, "パスワード生成数         1        2        3        4        5")
GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9745))
GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
passseiseikazu = 1

GraphicsWindow.MouseDown = mousedown

passsyuturyoku[1] = Controls.AddTextBox(1,180)
passsyuturyoku[2] = Controls.AddTextBox(1 + 190,180)
passsyuturyoku[3] = Controls.AddTextBox(1 + 190*2,180)
passsyuturyoku[4] = Controls.AddTextBox(1,180 + 40)
passsyuturyoku[5] = Controls.AddTextBox(1 + 190,180 + 40)

passseisei = Controls.AddButton("パスワード生成",1,120)
Controls.ButtonClicked = passwordseisei

Sub mousedown
  mx = GraphicsWindow.MouseX
  my = GraphicsWindow.MouseY
  
  If (160 <= mx And mx <= 160 + 16) And (1 <= my And my <= 1 + 16) And (mojikazu = 12) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(212, 1, 16, 16)
    GraphicsWindow.FillRectangle(160, 1, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 1, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(212, 1, Text.GetCharacter(9744))
    mojikazu = 8
  EndIf
  
  If (212 <= mx And mx <= 212 + 16) And (1 <= my And my <= 1 + 16) And (mojikazu = 8) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(212, 1, 16, 16)
    GraphicsWindow.FillRectangle(160, 1, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 1, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(212, 1, Text.GetCharacter(9745))
    mojikazu = 12
  EndIf
  
  If (1 <= mx And mx <= 22) And (30 <= my And my <= 46) Then
    If jouken1 = 0 Then
      GraphicsWindow.BrushColor = "White"
      GraphicsWindow.FillRectangle(1, 30, 16, 16)
      GraphicsWindow.BrushColor = "Black"
      GraphicsWindow.DrawText(1, 30, Text.GetCharacter(9745))
      jouken1 = 1
    Else
      GraphicsWindow.BrushColor = "White"
      GraphicsWindow.FillRectangle(1, 30, 16, 16)
      GraphicsWindow.BrushColor = "Black"
      GraphicsWindow.DrawText(1, 30, Text.GetCharacter(9744))
      jouken1 = 0
    EndIf
  EndIf
  
  If (1 <= mx And mx <= 22) And (60 <= my And my <= 76) Then
    If jouken2 = 0 Then
      GraphicsWindow.BrushColor = "White"
      GraphicsWindow.FillRectangle(1, 60, 16, 16)
      GraphicsWindow.BrushColor = "Black"
      GraphicsWindow.DrawText(1, 60, Text.GetCharacter(9745))
      jouken2 = 1
    Else
      GraphicsWindow.BrushColor = "White"
      GraphicsWindow.FillRectangle(1, 60, 16, 16)
      GraphicsWindow.BrushColor = "Black"
      GraphicsWindow.DrawText(1, 60, Text.GetCharacter(9744))
      jouken2 = 0
    EndIf
  EndIf
  
  If (160 <= mx And mx <= 160 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
    passseiseikazu = 1
  EndIf
  
  If (160 + 55 <= mx And mx <= 160 + 55 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
    passseiseikazu = 2
  EndIf
  
  If (160 + 53*2 <= mx And mx <= 160 + 53*2 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
    passseiseikazu = 3
  EndIf
  
  If (160 + 53*3 <= mx And mx <= 160 + 53*3 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
    passseiseikazu = 4
  EndIf
  
  If (160 + 53*4 <= mx And mx <= 160 + 53*4 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9745))
    passseiseikazu = 5
  EndIf
EndSub

パスワード

Small Basicにチェックボックスを作るコントロールは用意されていないので、「チェックボックスもどき」を作ってみました。
Text.GetCharacter(9744)
で、「チェックボックス(チェックなし)」、
Text.GetCharacter(9745)
で、「チェックボックス(チェックあり)」という特殊文字を表示できますので、これを利用しました。
チェックボックスのあたりをクリックした時の挙動をサブルーチンmousedownの中に記述しています。
チェックボックスのON・OFFについてのパラメータも作ってあります。

後はそれぞれのパラメータに従って、パスワード生成した時の挙動を考えてみましょう。
パスワード生成数は、passseiseikazuの数によってFor〜Toループさせれば良さそうです。
ループさせる中身を考えてみましょう。

まずはjouken2 = 0の時を考えます。
つまり選べる文字が62文字です。
文字数に分けて、passwordを生成。
そしてjouken1「数字が1文字以上混ざったパスワードを生成する」の条件分岐を考えます。
jouken1 = 0なら、上で生成したパスワードをそのまま表示すれば終了になりますが、jouken1 = 1の時は数字が一文字以上混ざるまでループでパスワードを生成させれば良いでしょう。以下のような感じです。

For x =1 To passseiseikazu 'パスワード生成数。生成数分、以下をループさせる

If jouken2 = 0 Then '記号なしパスワード生成
  loop1:
  For i = 1 To mojikazu '指定した62文字から、8文字または12文字の文字を生成
    passw[i] = passmoji[Math.GetRandomNumber(62)]
  EndFor
  If mojikazu = 8 Then '生成した文字をつなげてパスワード「password[x]」にする
    password[x] = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8]
  Else
    password[x] = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8] + passw[9] + passw[10] + passw[11] + passw[12]
  EndIf
  If jouken1 = 0 Then '「password[x]」内に数字が混ざっているかいないかは問わない
    Controls.SetTextBoxText(passsyuturyoku[x], password[x])
  EndIf
  If jouken1 = 1 Then '「password[x]」内に数字が1文字以上
    If Text.IsSubText(password[x], "0") Or Text.IsSubText(password[x], "1") Or Text.IsSubText(password[x], "2") Or Text.IsSubText(password[x], "3") Or Text.IsSubText(password[x], "4") Or Text.IsSubText(password[x], "5") Or Text.IsSubText(password[x], "6") Or Text.IsSubText(password[x], "7") Or Text.IsSubText(password[x], "8") Or Text.IsSubText(password[x], "9") Then '「password」内に数字が混ざっている
      Controls.SetTextBoxText(passsyuturyoku[x], password[x])
    Else '「password[x]」内に数字が混ざっていない時はパスワード生成まで戻る
      Goto loop1
    EndIf
  EndIf
EndIf

jouken2 = 1の時は、選ぶ文字が72文字かつ、記号が必ず含まれていなければなりません。

If jouken2 = 1 Then '記号ありパスワード生成
  loop2:
  For i = 1 To mojikazu '指定した72文字から、8文字または12文字の文字を生成
    passw[i] = passmoji[Math.GetRandomNumber(72)]
  EndFor
  If mojikazu = 8 Then '生成した文字をつなげてパスワード「password[x]」にする
    password[x] = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8]
  Else
    password[x] = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8] + passw[9] + passw[10] + passw[11] + passw[12]
  EndIf
  If Text.IsSubText(password[x], "+") Or Text.IsSubText(password[x], "-") Or Text.IsSubText(password[x], "/") Or Text.IsSubText(password[x], "!") Or Text.IsSubText(password[x], "#") Or Text.IsSubText(password[x], "_") Or Text.IsSubText(password[x], "^") Or Text.IsSubText(password[x], "*") Or Text.IsSubText(password[x], "@") Or Text.IsSubText(password[x], "~") Then '「password」内に記号がある時
    If jouken1 = 0 Then '「password[x]」内に数字が混ざっているかいないかは問わない
      Controls.SetTextBoxText(passsyuturyoku[x], password[x])
    EndIf
    If jouken1 = 1 Then '「password」内に数字が1文字以上
      If Text.IsSubText(password[x], "0") Or Text.IsSubText(password[x], "1") Or Text.IsSubText(password[x], "2") Or Text.IsSubText(password[x], "3") Or Text.IsSubText(password[x], "4") Or Text.IsSubText(password[x], "5") Or Text.IsSubText(password[x], "6") Or Text.IsSubText(password[x], "7") Or Text.IsSubText(password[x], "8") Or Text.IsSubText(password[x], "9") Then
        Controls.SetTextBoxText(passsyuturyoku[x], password[x])
      Else '「password[x]」内に数字が混ざっていない時はパスワード生成まで戻る
        Goto loop2
      EndIf
    EndIf
  Else '「password[x]」内に記号が混ざっていない時はパスワード生成まで戻る
    Goto loop2
  EndIf
EndIf

EndFor '生成数分のループはここまで

完成したプログラムは以下の通り。

GraphicsWindow.Title = "パスワード生成"
GraphicsWindow.Width = 640
GraphicsWindow.Height = 300

GraphicsWindow.BrushColor = "Black"
GraphicsWindow.FontSize = 16
GraphicsWindow.FontName = "メイリオ"

passmoji = "1=a;2=b;3=c;4=d;5=e;6=f;7=g;8=h;9=i;10=j;11=k;12=l;13=m;14=n;15=o;16=p;17=q;18=r;19=s;20=t;21=u;22=v;23=w;24=x;25=y;26=z;27=A;28=B;29=C;30=D;31=E;32=F;33=G;34=H;35=I;36=J;37=K;38=L;39=M;40=N;41=O;42=P;43=Q;44=R;45=S;46=T;47=U;48=V;49=W;50=X;51=Y;52=Z;53=0;54=1;55=2;56=3;57=4;58=5;59=6;60=7;61=8;62=9;63=+;64=-;65=/;66=!;67=#;68=_;69=^;70=*;71=@;72=~;"

GraphicsWindow.DrawText(1, 1, "パスワードの文字数       8       12")
GraphicsWindow.DrawText(160, 1, Text.GetCharacter(9745))
GraphicsWindow.DrawText(212, 1, Text.GetCharacter(9744))
mojikazu = 8

GraphicsWindow.DrawText(1, 30, Text.GetCharacter(9744))
GraphicsWindow.DrawText(22, 30, "数字が1文字以上混ざったパスワードを生成する")
jouken1 = 0

GraphicsWindow.DrawText(1, 60, Text.GetCharacter(9744))
GraphicsWindow.DrawText(22, 60, "記号「+-/!#_^*@~」が1文字以上混ざったパスワードを生成する")
jouken2 = 0

GraphicsWindow.DrawText(1, 90, "パスワード生成数         1        2        3        4        5")
GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9745))
GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
passseiseikazu = 1

GraphicsWindow.MouseDown = mousedown

passsyuturyoku[1] = Controls.AddTextBox(1, 180)
passsyuturyoku[2] = Controls.AddTextBox(1 + 190, 180)
passsyuturyoku[3] = Controls.AddTextBox(1 + 190*2, 180)
passsyuturyoku[4] = Controls.AddTextBox(1, 180 + 40)
passsyuturyoku[5] = Controls.AddTextBox(1 + 190, 180 + 40)

passseisei = Controls.AddButton("パスワード生成" ,1 ,120)
Controls.ButtonClicked = passwordseisei

Sub mousedown
  mx = GraphicsWindow.MouseX
  my = GraphicsWindow.MouseY
  
  If (160 <= mx And mx <= 160 + 16) And (1 <= my And my <= 1 + 16) And (mojikazu = 12) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(212, 1, 16, 16)
    GraphicsWindow.FillRectangle(160, 1, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 1, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(212, 1, Text.GetCharacter(9744))
    mojikazu = 8
  EndIf
  
  If (212 <= mx And mx <= 212 + 16) And (1 <= my And my <= 1 + 16) And (mojikazu = 8) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(212, 1, 16, 16)
    GraphicsWindow.FillRectangle(160, 1, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 1, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(212, 1, Text.GetCharacter(9745))
    mojikazu = 12
  EndIf
  
  If (1 <= mx And mx <= 22) And (30 <= my And my <= 46) Then
    If jouken1 = 0 Then
      GraphicsWindow.BrushColor = "White"
      GraphicsWindow.FillRectangle(1, 30, 16, 16)
      GraphicsWindow.BrushColor = "Black"
      GraphicsWindow.DrawText(1, 30, Text.GetCharacter(9745))
      jouken1 = 1
    Else
      GraphicsWindow.BrushColor = "White"
      GraphicsWindow.FillRectangle(1, 30, 16, 16)
      GraphicsWindow.BrushColor = "Black"
      GraphicsWindow.DrawText(1, 30, Text.GetCharacter(9744))
      jouken1 = 0
    EndIf
  EndIf
  
  If (1 <= mx And mx <= 22) And (60 <= my And my <= 76) Then
    If jouken2 = 0 Then
      GraphicsWindow.BrushColor = "White"
      GraphicsWindow.FillRectangle(1, 60, 16, 16)
      GraphicsWindow.BrushColor = "Black"
      GraphicsWindow.DrawText(1, 60, Text.GetCharacter(9745))
      jouken2 = 1
    Else
      GraphicsWindow.BrushColor = "White"
      GraphicsWindow.FillRectangle(1, 60, 16, 16)
      GraphicsWindow.BrushColor = "Black"
      GraphicsWindow.DrawText(1, 60, Text.GetCharacter(9744))
      jouken2 = 0
    EndIf
  EndIf
  
  If (160 <= mx And mx <= 160 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
    passseiseikazu = 1
  EndIf
  
  If (160 + 55 <= mx And mx <= 160 + 55 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
    passseiseikazu = 2
  EndIf
  
  If (160 + 53*2 <= mx And mx <= 160 + 53*2 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
    passseiseikazu = 3
  EndIf
  
  If (160 + 53*3 <= mx And mx <= 160 + 53*3 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9745))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9744))
    passseiseikazu = 4
  EndIf
  
  If (160 + 53*4 <= mx And mx <= 160 + 53*4 + 16) And (90 <= my And my <= 90 + 16) Then
    GraphicsWindow.BrushColor = "White"
    GraphicsWindow.FillRectangle(160, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 55, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*2, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*3, 90, 16, 16)
    GraphicsWindow.FillRectangle(160 + 53*4, 90, 16, 16)
    GraphicsWindow.BrushColor = "Black"
    GraphicsWindow.DrawText(160, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 55, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*2, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*3, 90, Text.GetCharacter(9744))
    GraphicsWindow.DrawText(160 + 53*4, 90, Text.GetCharacter(9745))
    passseiseikazu = 5
  EndIf
EndSub

Sub passwordseisei
  
  For x = 1 To passseiseikazu
    
  If jouken2 = 0 Then
    loop1:
    For i = 1 To mojikazu
      passw[i] = passmoji[Math.GetRandomNumber(62)]
    EndFor
    If mojikazu = 8 Then
      password[x] = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8]
    Else
      password[x] = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8] + passw[9] + passw[10] + passw[11] + passw[12]
    EndIf
    If jouken1 = 0 Then  
      Controls.SetTextBoxText(passsyuturyoku[x], password[x])
    EndIf
    If jouken1 = 1 Then  
      If Text.IsSubText(password[x], "0") Or Text.IsSubText(password[x], "1") Or Text.IsSubText(password[x], "2") Or Text.IsSubText(password[x], "3") Or Text.IsSubText(password[x], "4") Or Text.IsSubText(password[x], "5") Or Text.IsSubText(password[x], "6") Or Text.IsSubText(password[x], "7") Or Text.IsSubText(password[x], "8") Or Text.IsSubText(password[x], "9") Then
        Controls.SetTextBoxText(passsyuturyoku[x], password[x])
      Else
        Goto loop1
      EndIf
    EndIf
  EndIf

  If jouken2 = 1 Then  
    loop2:
    For i = 1 To mojikazu
      passw[i] = passmoji[Math.GetRandomNumber(72)]
    EndFor
    If mojikazu = 8 Then
      password[x] = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8]
    Else
      password[x] = passw[1] + passw[2] + passw[3] + passw[4] + passw[5] + passw[6] + passw[7] + passw[8] + passw[9] + passw[10] + passw[11] + passw[12]
    EndIf
    If Text.IsSubText(password[x], "+") Or Text.IsSubText(password[x], "-") Or Text.IsSubText(password[x], "/") Or Text.IsSubText(password[x], "!") Or Text.IsSubText(password[x], "#") Or Text.IsSubText(password[x], "_") Or Text.IsSubText(password[x], "^") Or Text.IsSubText(password[x], "*") Or Text.IsSubText(password[x], "@") Or Text.IsSubText(password[x], "~") Then
      If jouken1 = 0 Then  
        Controls.SetTextBoxText(passsyuturyoku[x], password[x])
      EndIf
      If jouken1 = 1 Then  
        If Text.IsSubText(password[x], "0") Or Text.IsSubText(password[x], "1") Or Text.IsSubText(password[x], "2") Or Text.IsSubText(password[x], "3") Or Text.IsSubText(password[x], "4") Or Text.IsSubText(password[x], "5") Or Text.IsSubText(password[x], "6") Or Text.IsSubText(password[x], "7") Or Text.IsSubText(password[x], "8") Or Text.IsSubText(password[x], "9") Then
          Controls.SetTextBoxText(passsyuturyoku[x], password[x])
        Else
          Goto loop2
        EndIf
      EndIf
    Else
      Goto loop2
    EndIf
  EndIf
  
  EndFor
  
EndSub


Microsoft Small Basic Program Listing : HLB306

パスワード

パスワード

パスワード

こんな感じでパスワードを生成できます。











▲TOPへ戻る