生成随机数和字母

时间:2017-04-24 22:21:52

标签: vbscript

有时候在中间是ZERO时会出现此错误:

  

无效的程序调用或参数:' 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

2 个答案:

答案 0 :(得分:3)

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

使用Rnd()执行此操作的简单公式是

(Rnd() * Len(VALID_TEXT)) + 1

也会将Randomize()移到循环之外,因为当你在循环的每次迭代中重置种子时,你只会减少随机性。

错误的原因是Mid()需要一个有效的开始和大小,零值不是。有关详细信息,请参阅this question

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

答案 1 :(得分:0)

Mid的第二个参数是1。这意味着,如果你这样做了:

Mid(VALID_TEXT,1,1)

你会得到“a”,而不是你想象中的“b”。

一个简单的解决方法是在第二个参数中添加1,但是你会在顶端遇到同样的问题。通常,人们会在将其乘以而不是使用Math.Round后将随机数向下舍入,或者查看Math.Floor或整数截断。