我已经开发了一个随机字符串生成器,但它的行为并不像我希望的那样.我的目标是能够运行两次并生成两个不同的四个字符随机字符串.但是,它只生成一个四字符随机字符串两次.
这是代码和输出的示例:
private string RandomString(int size)
{
StringBuilder builder = new StringBuilder();
Random random = new Random();
char ch;
for (int i = 0; i < size; i++)
{
ch = Convert.ToChar(Convert.ToInt32(Math.Floor(26 * random.NextDouble() + 65)));
builder.Append(ch);
}
return builder.ToString();
}
// get 1st random string
string Rand1 = RandomString(4);
// get 2nd random string
string Rand2 = RandomString(4);
// create full rand string
string docNum = Rand1 + "-" + Rand2;
Run Code Online (Sandbox Code Playgroud)
......输出看起来像这样:UNTE-UNTE ......但看起来应该像UNTE-FWNU
如何确保两个明显随机的字符串?
当我们网站上的用户丢失密码并前往"忘记密码"页面时,我们需要给他一个新的临时密码.我真的不介意这是多么随机,或者如果它匹配所有"需要的"强密码规则,我想要做的就是给他们一个密码,以便以后更改.
该应用程序是一个用C#编写的Web应用程序.所以我一直在考虑使用Guid的简单方法.即
Guid.NewGuid().ToString("d").Substring(1,8)
Run Code Online (Sandbox Code Playgroud)
Suggesstions?想法?
我有一个ArrayList,我需要能够单击一个按钮然后从该列表中随机挑出一个字符串并将其显示在消息框中.
我该怎么做呢?
我有两个不同形状的numpy数组,但长度相同(领先维度).我想改变它们中的每一个,使得相应的元素继续对应 - 即相对于它们的前导索引一致地混洗它们.
此代码有效,并说明了我的目标:
def shuffle_in_unison(a, b):
assert len(a) == len(b)
shuffled_a = numpy.empty(a.shape, dtype=a.dtype)
shuffled_b = numpy.empty(b.shape, dtype=b.dtype)
permutation = numpy.random.permutation(len(a))
for old_index, new_index in enumerate(permutation):
shuffled_a[new_index] = a[old_index]
shuffled_b[new_index] = b[old_index]
return shuffled_a, shuffled_b
Run Code Online (Sandbox Code Playgroud)
例如:
>>> a = numpy.asarray([[1, 1], [2, 2], [3, 3]])
>>> b = numpy.asarray([1, 2, 3])
>>> shuffle_in_unison(a, b)
(array([[2, 2],
[1, 1],
[3, 3]]), array([2, 1, 3]))
Run Code Online (Sandbox Code Playgroud)
然而,这种感觉笨重,效率低,而且速度慢,而且需要使阵列的复制 - 我宁愿他们洗牌在原地的,因为他们将是相当大的.
有没有更好的方法来解决这个问题?更快的执行速度和更低的内存使用率是我的主要目标,但优雅的代码也会很好.
我有另外一个想法是:
def shuffle_in_unison_scary(a, b):
rng_state = numpy.random.get_state()
numpy.random.shuffle(a)
numpy.random.set_state(rng_state)
numpy.random.shuffle(b)
Run Code Online (Sandbox Code Playgroud)
这工作...但它是一个有点吓人,因为我看不出有什么保证它会继续工作 - …
我正在寻找最好的方法(快速和优雅)来获得python中的随机布尔值(翻转硬币).
目前我正在使用random.randint(0, 1)或random.getrandbits(1).
有没有更好的选择我不知道?
我正在使用MSSQL Server 2005.在我的数据库中,我有一个表"customerNames",它有两列"Id"和"Name"和大约.1,000个结果.
我正在创建一个功能,每次我必须随机挑选5个客户.任何人都可以告诉我如何创建一个查询,每次执行查询时将获得随机的5行(Id和Name)?
我的团队交出了一些生成随机令牌的服务器端代码(用Java),我对此有一个问题 -
这些令牌的目的是相当敏感的 - 用于会话ID,密码重置链接等.所以他们确实需要加密随机,以避免有人猜测它们或蛮力强制它们.令牌是"长",所以它是64位长.
代码当前使用java.util.Random该类来生成这些令牌.文档([ http://docs.oracle.com/javase/7/docs/api/java/util/Random.html] [1 ])java.util.Random清楚地说明了以下内容:
java.util.Random的实例不具有加密安全性.相反,请考虑使用SecureRandom来获取加密安全的伪随机数生成器,以供安全敏感应用程序使用.
但是,代码当前使用的方式java.util.Random是 - 它实例化java.security.SecureRandom类,然后使用该SecureRandom.nextLong()方法获取用于实例化java.util.Random类的种子.然后它使用java.util.Random.nextLong()方法生成令牌.
所以我现在的问题 - 鉴于java.util.Random正在使用种子,它仍然是不安全的java.security.SecureRandom吗?我是否需要修改代码以便它java.security.SecureRandom专门用于生成令牌?
目前代码种子是Random启动时的一次
我一直Random (java.util.Random)用来洗牌一副52张牌.有52个!(8.0658175e + 67)可能性.然而,我发现种子java.util.Random是a long,它在2 ^ 64(1.8446744e + 19)处小得多.
从这里开始,我怀疑是否java.util.Random 真的那么随意 ; 它实际上能够生成所有52!可能性?
如果没有,我怎样才能可靠地生成一个更好的随机序列,可以产生所有52个!可能性?
我知道如何在Python中生成一个范围内的随机数.
random.randint(numLow, numHigh)
Run Code Online (Sandbox Code Playgroud)
而且我知道我可以把它放在循环中以生成n个这些数字
for x in range (0, n):
listOfNumbers.append(random.randint(numLow, numHigh))
Run Code Online (Sandbox Code Playgroud)
但是,我需要确保该列表中的每个数字都是唯一的.除了一系列条件语句之外,还有一种生成n个唯一随机数的直接方法吗?
编辑:重要的是列表中的每个数字都与其他数字不同.
所以
[12,5,6,1] =好
但
[12,5,5,1] =不好,因为数字5出现两次.
random ×10
c# ×3
python ×3
java ×2
arrays ×1
cryptography ×1
database ×1
geometry ×1
math ×1
numpy ×1
passwords ×1
permutation ×1
probability ×1
random-seed ×1
security ×1
shuffle ×1
sql ×1
string ×1
unique ×1