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