Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vbscript 生成随机数字和字母_Vbscript - Fatal编程技术网

Vbscript 生成随机数字和字母

Vbscript 生成随机数字和字母,vbscript,Vbscript,当mid为零时,有时会持续出现此错误: 无效的过程调用或参数:“Mid” 我该如何解决这个问题 Function CreateRandomString(iSize) Const VALID_TEXT = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890" Dim sNewSearchTag Dim I For I = 0 To iSize Randomize

当mid为零时,有时会持续出现此错误:

无效的过程调用或参数:“Mid”

我该如何解决这个问题

Function CreateRandomString(iSize)
    Const VALID_TEXT = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"
    Dim sNewSearchTag
    Dim I

    For I = 0 To iSize
        Randomize
        sNewSearchTag = sNewSearchTag & Mid(VALID_TEXT,Round(Rnd * Len(VALID_TEXT)),1)
    Next

    CreateRandomString = sNewSearchTag
End Function
的第二个参数基于1。这意味着,如果你这样做了:

Mid(VALID_TEXT,1,1)
你会得到“a”,而不是你所期望的“b”


一个简单的解决方法是在第二个参数中添加1,但是在顶端会遇到相同的问题。通常情况下,人们将随机数相乘后向下取整,而不是使用Math.round,即查看Math.Floor或整数截断。

要使随机范围正确,您需要确保生成的随机值介于1和
有效字符串值的长度之间

使用
Rnd()
实现这一点的简单公式是

(Rnd() * Len(VALID_TEXT)) + 1
同时将
Randomize()
移动到循环外部,因为在循环的每次迭代中重置种子时,您只需减少其随机性

错误的原因是需要有效的开始和大小,而不是零值。有关更多信息,请参阅


有关随机数范围的更多信息,请参见另一个问题。

您只需调用
Randomize()
一次,如果
Rnd()
返回零或负值,会发生什么情况?也许可以解释为什么
Mid()
抱怨不能选择字符串的零长度,是吗??您需要指定一个随机范围
(Rnd()*UpperRange)+LowerRange)
将起作用。此处对随机范围函数的更好解释-可能重复的可能重复。错误链接这是VBScript而不是Visual Basic。另外,VBScript没有
Math.Round()
Math.Floor()