2011/07/21

指定された長さでランダムな英数字の文字列を生成するVBScriptのこと

32文字の暗号キーをVBScriptで作ってみたくなったの試しに書いてみた。
真っ先に思いついて書いたのは英数字の文字コードをランダムに出すもの(GenerateRndString)だが、なんかアホっぽい気がしたので英数字の文字列から文字をランダムに取り出す方にした(GenerateRndString2)。
お遊びコードです。あくまでも。

'
' Summary:
'  指定された長さでランダムな英数字の文字列を生成する
'
Option Explicit

Const TITLE = "ランダムな英数字文字列を生成するやつ"

Dim size

Do
 size = InputBox("生成する文字列の桁数ね", TITLE)
 If IsNumeric(size) Then
  size = CInt(size)
  Exit Do
 Else
  MsgBox "桁数だから数字で"
 End If
Loop
InputBox "こんな", TITLE, GenerateRndString2(size)



'
' Summary:
'  指定された長さでランダムな英数字の文字列を生成する
' Input:
'  size As Integer - 生成する文字列の長さ
' Output:
'  String - 生成した文字列
'
Function GenerateRndString(size)

 Dim str
 Dim n

 str = ""
 Randomize
 Do Until Len(str) >= size
  '数字または英字を生成する
  '"0"(048) ~ "9"(057)
  '"A"(065) ~ "Z"(090)
  '"a"(097) ~ "z"(122)
  n = Int((122 - 48 + 1) * Rnd + 48)
  If (48 <= n And n <= 57) _
   Or (65 <= n And n <= 90) _
   Or (97 <= n And n <= 122) Then
   str = str & Chr(n)
  End If
 Loop

 GenerateRndString = str

End Function



'
' Summary:
'  指定された長さでランダムな英数字の文字列を生成する
' Input:
'  size As Integer - 生成する文字列の長さ
' Output:
'  String - 生成した文字列
'
Function GenerateRndString2(size)

 Dim chars
 Dim str
 Dim i

 chars = "0123456789" _
  & "ABCDEFGHIJKLMNOPQRSTUVWXYZ" _
  & "abcdefghijklmnopqrstuvwxyz"

 str = ""
 Randomize
 For i = 1 To size
  str = str & Mid(chars, Int(Rnd * Len(chars) + 1), 1)
 Next

 GenerateRndString2 = str

End Function