Random 在excel中生成随机字符串(包含数百万个字符)

Random 在excel中生成随机字符串(包含数百万个字符),random,generator,Random,Generator,我正在寻找Microsoft Excel 2013的外接程序,它可以生成任何字符(数百万个)的真正随机字符串,尤其是(a-Z)(a-Z)(0-9)。请让我知道要安装的加载项或可以在Excel 2013中使用的命令来执行此任务。RAND和RANDBETWEEN函数返回的是bigint,而不是数字(在本例中是字符串),因此它们可能无法工作。谢谢。=ROUND(RAND(),0)在单元格中随机生成0或1。在8个单元中完成。将单个8个单元格连接成一个字符串。对其执行=BIN2DEC()。这会给你一个介于

我正在寻找Microsoft Excel 2013的外接程序,它可以生成任何字符(数百万个)的真正随机字符串,尤其是(a-Z)(a-Z)(0-9)。请让我知道要安装的加载项或可以在Excel 2013中使用的命令来执行此任务。RAND和RANDBETWEEN函数返回的是bigint,而不是数字(在本例中是字符串),因此它们可能无法工作。谢谢。

=ROUND(RAND(),0)
在单元格中随机生成0或1。在8个单元中完成。将单个8个单元格连接成一个字符串。对其执行
=BIN2DEC()
。这会给你一个介于0和255之间的随机数
=RANDBETWEEN(0255)
做同样的事情

这对你有帮助吗?只需计算出需要的位数,然后生成要分配的随机数。

=ROUND(RAND(),0)
在单元格中随机生成0或1。在8个单元中完成。将单个8个单元格连接成一个字符串。对其执行
=BIN2DEC()
。这会给你一个介于0和255之间的随机数
=RANDBETWEEN(0255)
做同样的事情


这对你有帮助吗?只需计算出需要的位数,然后生成要分配的随机数。

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

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
中,您将得到如下结果:

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


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

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

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
中,您将得到如下结果:

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


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

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

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"
   }];
 }
函数myFunction(){
函数randnumber(){
var sheet=SpreadsheetApp.getActive().getSheetByName(“sheet1”);
var范围=sheet.getRange(“A1:Z10”);

对于(var x=1;x,下面的代码用随机数填充整个电子表格

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"
   }];
 }
函数myFunction(){
函数randnumber(){
var sheet=SpreadsheetApp.getActive().getSheetByName(“sheet1”);
var范围=sheet.getRange(“A1:Z10”);

对于(var x=1;x“真随机”——你是说像量子力学一样?“真随机”——你是说像量子力学一样?这比
randtween(0255)
有什么优势?这比
randtween(0255)
有什么优势?请注意,csprng很难使用。它们产生字节值(介于0和255之间)为了使输出保持随机,需要更多的数学运算。例如,如果需要0和2之间的随机值,要使用最小的熵,需要提取2位,如果它等于3(11)您需要扔掉这些位,然后检查接下来的2位,依此类推,否则随机性会受到影响。这很容易出错,唯一的原因是它是一个逻辑错误,永远不会产生意外的输出,因此也很难检测。@JonathanGray
它们产生字节值
-一般来说不是。Mersenn例如,eTwister产生32或64位。
这将是一个逻辑错误,永远不会产生意外的输出,因此也很难检测到
-如果它永远不会产生意外的输出,那么它是随机的(因为这是我们所期望的).那没问题。虽然你的验收抽样方法没有错,但没有一个科学图书馆会这么做(因为它只是不需要获得足够好的随机值)。通常我们不关心最大化给定熵的随机性,因为PRNG是fast32和64都是8的倍数,因此这只能加强我的陈述,即它们只生成字节值。这可以转换为4或8字节。但是我必须反驳你的论点,即有些随机性就足够随机。如果用于加密HIC的目的,任何在CSPRG中的缺陷或使用它的方式都可以真实地引入潜在的攻击向量。PRNG是不够的。因为我自己也和CSPRNG一起工作过,知道正确使用它们有多棘手,所以我决定提供我的见解。这远远不是接受抽样。@sascha我忘记给你贴标签了……而且我想你可能会对什么是CSPRNG感到困惑,或者你可能误读了。在谷歌快速搜索后,我发现Mersenne Twister是not加密安全(至少以其本机形式)。仅供参考,逻辑错误仍然是一个逻辑错误,无论它是否产生预期输出。@JonathanGray我没看到你在谈论加密PRNG。我的错。请确保我理解这些内容(但就像我说的:我误读了)还有:你的小技巧描述了一个非常简单的接受抽样。当然,在随机性抽取的任务中可能会有更多有趣的东西(包括美丽的理论性东西,比如膨胀图)但这在这里并不重要。你提到的其他东西可能会引起争议,但如果没有正式的模型,这会很枯燥。很抱歉这些误导性的评论!相关的一点是,CSPRNG很难使用。它们会产生字节值(0到255之间)为了保持输出的随机性,需要更多的数学运算。例如,如果你需要一个介于0和2之间的随机值,要使用最小的熵,你需要提取2位,如果它等于3(11),你需要扔掉这些位,然后检查下一个2位