2014-04-27 99 views
2

如何生成的这个模式使用LotusScript 8个字符的字符串?例如:0E 1F A3 ZK(每两个字符后面都有空格,包括最后一个字符)。每个字符只能是0-9或A-Z(仅限大写)。我用前RandomizeRnd方法,在这里将它的想法,但我不知道这是正确的做法,以及如何实现这一目标。另一件事是这个字符串将被保存到我的文档,我有一个视图,列出每个生成的字符串。这意味着每次生成一个字符串时,它必须是唯一的。如果生成的字符串已在另一个文档中使用,则继续生成,直到生成一个尚未使用的字符串。Lotusscript生成随机8个字符的字符串?

+0

为什么不直接使用到@unique上面获得的F值得到一个随机字符串?这个2x4格式必须有特定的需求,呃? –

+1

@DavidNavarre我做的东西,有与用于测试目的,我没有为每个文档足够独特的智能卡智能卡的事情。因此,这是最接近我可以使测试数据至少看起来像真实数据。 (卡片ID是2×4格式) –

回答

5

是的,您也可以在这种情况下使用Rnd

定义一个函数getRandom()它给你一个随机字符串格式为“XX XX XX XX”,每次调用。

Function getRandom() As String 
    Const charList = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    getRandom = _ 
    Mid(charList, 35*Rnd+1, 1) + Mid(charList, 35*Rnd+1, 1) + " " + _ 
    Mid(charList, 35*Rnd+1, 1) + Mid(charList, 35*Rnd+1, 1) + " " + _ 
    Mid(charList, 35*Rnd+1, 1) + Mid(charList, 35*Rnd+1, 1) + " " + _ 
    Mid(charList, 35*Rnd+1, 1) + Mid(charList, 35*Rnd+1, 1) 
End Function 
  • 与所有允许的字符0-9和A-Z的字符串。

  • 你得到一个介于1和36之间的随机数字35*Rnd+1。这是您在的索引中随机获取其中一个角色。

只要你得到一个字符串还没有在你的视图中,在一个循环中调用函数getRandom()

+2

我建议使用randomize来按照帮助中的建议生成随机数字。否则,你会一次又一次地得到相同的随机字符串... –

+0

当然,如果人们在不同的副本或多人同时工作,你可能最终得到重复无论如何,因为他们不会在视图的时候系统检查。 –

0
sID = Join(Evaluate(|@Password(@Unique)|)) 

Mid$(sID, 2, 2) & " " & Mid$(sID, 4, 2) & " " & Mid$(sID, 6, 2) & " " & Mid$(sID, 8, 2) 

工作原理:

  1. 是@unique一串顺序排列的令牌

  2. @Password(anyText)将返回括号内的唯一的32位十六进制字符串

  3. Evaluate将运行@Function公式并返回1个元素的数组。因此,围绕评估的连接会将其转换为字符串标量值。

  4. Mid $函数只是在2个字符偏移处产生2个字符值。

关于你原来你的问题的参数,唯一的问题是,你永远不会看到,因为我们使用的是十六进制字符(0-9,AF)