2014-04-27 136 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)