【问题标题】:Generate Random Strings (with millons of characters) in excel在excel中生成随机字符串(具有数百万个字符)
【发布时间】:2017-02-14 14:11:13
【问题描述】:

我正在寻找 Microsoft Excel 2013 的插件,它可以生成任何字符(数百万个)的真正随机字符串,尤其是 (A-Z) (a-z) (0-9)。请告诉我要安装的加载项或可以在 Excel 2013 中使用的命令来执行此任务。 RAND 和 RANDBETWEEN 函数返回 bigint,而不是数字(在这种情况下是字符串),因此它们可能不起作用。谢谢。

【问题讨论】:

  • “真正随机”——你的意思是像量子力学?

标签: random generator


【解决方案1】:

=ROUND(RAND(),0) 在单元格中随机生成 0 或 1。在 8 个单元格中执行此操作。将单个 8 个单元格连接成一个字符串。在上面做=BIN2DEC()。这会给你一个 0 到 255 之间的随机数。=RANDBETWEEN(0,255) 做同样的事情。

这对你有帮助吗?只需弄清楚您想要多少位数,然后生成要分配的随机数。

【讨论】:

  • 这比RANDBETWEEN(0,255)有什么优势?
【解决方案2】:

您可以编写自己的函数。它不会是真正随机的,甚至不是加密安全的,但它可能很有用。比如:

Function RandChars(n As Long, Optional alphabet As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789") As String
    Dim chars() As String
    Dim i As Long, k As Long
    k = Len(alphabet)
    ReDim chars(1 To n)
    With Application.WorksheetFunction
        For i = 1 To n
            chars(i) = Mid(alphabet, .RandBetween(1, k), 1)
        Next i
    End With
    RandChars = Join(chars, "")
End Function

如果将其输入到标准 VBA 代码模块中并输入公式

=RandChars(10)A1:A10 范围内你会得到类似的东西:

如果您想要加密安全的东西,您需要用加密安全的 PRNG 替换 RandBetween

【讨论】:

  • 只是在相关说明中,CSPRNG 很难使用。它们产生字节值(0 到 255 之间),为了保持输出随机,涉及到更多的数学运算。例如,如果您需要一个介于 0 和 2 之间的随机值,要使用最少的熵,您需要提取 2 位,如果它等于 3 (11),您需要丢弃这些位并检查接下来的 2 位,以此类推,否则会影响随机性。这太容易出错了,而且独特的是它是一个永远不会产生意外输出的逻辑错误,因此也很难检测到。
  • @JonathanGray They produce byte values - 一般情况下不会。例如 MersenneTwister 产生 32 或 64 位。 it would be a logic error that will never produce unexpected output so can also be very difficult to detect - 如果它永远不会产生意外的输出,那么它就是随机的(因为这是我们所期望的)。那就没问题了。虽然您的 acceptance-sampling 方法没有错,但没有科学图书馆这样做(因为它只是不需要获得足够好的随机值)。通常我们不关心最大化给定熵的随机性,因为 PRNGS 很快
  • 32 和 64 都是 8 的倍数,所以这只会强化我的说法,即它们只产生字节值。这转换为 4 或 8 个字节。然而,我必须反驳你的论点,即有点随机就足够随机了。如果用于加密目的,CSPRNG 中的任何缺陷或其使用方式实际上都会引入潜在的攻击向量。当常规(快速)PRNG 不够用时,专门使用 CSPRNG。由于我自己使用过 CSPRNG,并且知道正确使用它们有多么棘手,因此我决定提供我的见解。这远非验收抽样。
  • @sascha 我忘记给你加标签了......另外我认为你可能对 CSPRNG 是什么感到困惑,或者你可能误读了。在谷歌快速搜索后,我发现 Mersenne Twister 在密码学上并不安全(至少在其原生形式中)。仅供参考,无论是否产生预期输出,逻辑错误仍然是逻辑错误。
  • @JonathanGray 我没有看到您在谈论加密-PRNGS。我的错。确保我理解那些东西(但就像我说的:我误读了)。另外:您的技巧描述了一种简单的验收抽样形式。当然,在随机提取任务中可能会有更多有趣的东西(包括漂亮的理论东西,如扩展图),但这在这里并不重要。人们可能会争论你提到的其他东西,但如果没有正式的模型,那就很乏味了。对误导的 cmets 深表歉意!
【解决方案3】:

下面的代码用随机数填充整个电子表格。

function myFunction() {

function randnumber() {
var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
var range = sheet.getRange("A1:Z10");
for (var x = 1; x <= range.getWidth(); x++) {
for (var y = 1; y <= range.getHeight(); y++) {
  var number = Math.floor(Math.random() * 8999999999) + 1000000000;
  range.getCell(y, x).setValue(number);
    }
  }

 var sheet = SpreadsheetApp.getActive().getSheetByName("sheet1");
 var entries = [{
 name : "Numbers: 1-9",
 functionName : "numbers19"
   }];
 }

【讨论】:

    猜你喜欢
    • 2014-04-07
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    • 2020-03-05
    • 2010-11-23
    • 2011-07-23
    • 2014-02-09
    相关资源
    最近更新 更多