尝试使用0-9和a-z / A-Z创建一个随机字符串,长度为x的字符,似乎无法找到一个好的例子,任何想法?
答案 0 :(得分:27)
Function RandomString(cb As Integer) As String
Randomize
Dim rgch As String
rgch = "abcdefghijklmnopqrstuvwxyz"
rgch = rgch & UCase(rgch) & "0123456789"
Dim i As Long
For i = 1 To cb
RandomString = RandomString & Mid$(rgch, Int(Rnd() * Len(rgch) + 1), 1)
Next
End Function
请注意,内置随机数生成器不具有cryprograph安全性,因此不应使用此类函数生成密码。
答案 1 :(得分:1)
我忘记了所有的VB6(感谢上帝)但是在伪代码中它很容易:
all_chars = an array of all the valid chars seed random number generator for i = 1 to x do random_index = get a random number between 1 and length of all_chars 'I remember how to concat and comment in VB6 :-) string = string & all_chars[random_index] end for done!
所以这只是找到如何创建数组并用字符填充它,如何获取数组的长度以及如何在所述数组的第一个和最后一个索引之间获得random number的问题。
嗯,当然这一切和循环。
答案 2 :(得分:1)
Joel的方法很好(除了整数循环变量,并使用“+”进行连接)。 ( - :
然而,输出可以通过几种方式变得更有趣。
首先,您可以通过创建包含比Zz字符多得多的Ee和Tt字符的种子字符串,生成与普通英文文本具有相同近似频率分布的字符串。 this近似混合中可能有1000个字符(如果是混合大小的两倍)的字符串可以正常工作。
添加相同数量的0..9个字符,无论您希望在最终输出中看到什么比例。你也可以改变这个看到的字符串,使它看起来更随机,但它并不重要。
然后使用1..Len(seedstring)范围内的随机选择器来挑选每个角色,就像在Joel的例子中一样。
为什么这样?没有充分的理由,除了结果看起来更熟悉。
第二种选择是生成两个这样的种子串,一个是语料库权重的辅音,另一个是元音具有相同的权重(E比O大于U等)。我只会使用一个案例,而不是混合案例。
然后交替两个随机选择,首先来自辅音,然后来自元音,以生成诸如TI,WO,DE等的有向图。将这些链接在一起形成“单词”。
因为结果输出是可读的,所以更容易记住。此外,它看起来很奇怪日本人。 ( - :
我们的Stamina库(VB / VBA的ASM函数)具有执行这些操作的例程,但在纯VB中它很容易。
答案 3 :(得分:1)
受这个问题的启发,我问similar question我建议使用GUID来生成序列。正如我所指出的那样,这个短暂的结果是,如果我的逻辑中没有其他缺陷,那么它将是A到F和10位的随机序列。如果您可以接受字母G到Z缺失的事实,那么这可能是您的解决方案。
答案 4 :(得分:0)
使用随机化
Int(Rnd *上限)+(下限)将生成随机数
生成一个数组,其值从asc(“a”)到asc(“z”),从asc(“0”)到asc(“9”)
生成1到26之间的随机数(10 + 26)并在数组中查找。
不再安装VB6。
答案 5 :(得分:0)
使用Vinko Vrsalovic的算法,这里是功能代码,谢谢和cya!
all_chars = array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","S","T","U","V","W","X","Y","Z")
Randomize
for i = 1 to 4
random_index = int(Rnd()*25)
clave = clave & all_chars(random_index)
next
答案 6 :(得分:0)
你并没有真正说出你使用它的原因。如果你需要小字符串(< = 32,766),我认为Joel的功能可以正常工作。但是,如果您需要一些东西来生成非常大的字符串,这可能会很有用。在我的系统上,它将在0.33291015625秒内执行1,000,000个字符串(是的,我知道...大锤:))此外,您可以参数化字符集,这样您就不必每次都想要执行某些操作时更改代码“特殊“:):
Public Function RandomString( _
ByVal length As Long, _
Optional charset As String = "abcdefghijklmnopqrstuvwxyz0123456789" _
) As String
Dim chars() As Byte, value() As Byte, chrUprBnd As Long, i As Long
If length > 0& Then
Randomize
chars = charset
chrUprBnd = Len(charset) - 1&
length = (length * 2&) - 1&
ReDim value(length) As Byte
For i = 0& To length Step 2&
value(i) = chars(CLng(chrUprBnd * Rnd) * 2&)
Next
End If
RandomString = value
End Function
答案 7 :(得分:0)
如果您使用的是SQL数据库,则可以生成如下的PrimaryKey:
SELECT NEWID() as KeyValue
这是非常好的方式,而且非常安全。