【问题标题】:Is sample method of random library unique when seeded with unique number?用唯一编号播种时,随机库的样本方法是否唯一?
【发布时间】:2014-06-14 14:22:34
【问题描述】:

我下面的代码块应该生成随机的唯一字符串。使用随机抽样方法是否足够安全?

def generate_voucher_code_string(length=13):
    rand = random.Random()
    rand.seed(get_seq(VOUCHER_CODE_SEQ_KEY))
    return ''.join(rand.sample(VOUCHER_CODE_CHARS, length))

注意:get_seq 方法每次调用都会返回一个不同的数字。

【问题讨论】:

    标签: python random unique random-sample


    【解决方案1】:

    随机模块不能为不同的种子产生相同的输出。发生这种情况的概率取决于所使用的算法。

    您可能想要的是uuid 模块,它基于散列生成RFC 4122 通用唯一标识符。散列通常非常大,以至于非唯一性的概率可以忽略不计。

    【讨论】:

    • "随机模块不能为不同的种子产生相同的输出。"你能拿出证据吗?我搜索了文档,没有发现任何关于此的内容。
    • 它没有记录,因为前几个样本的唯一性取决于种子不是对 prngs 进行分类的属性。 python 使用一个 32 位的 mersenne twister,它有一个巨大的状态空间,所以它的种子的初始输出很可能是唯一的,但它的随机模块仍然不是为此目的而设计的。 uuid 模块是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多