大佬们,生成随机数这样加多个函数有意义吗

查看 155|回复 11
作者:way2create   
场景
单机的小项目,后台内部用,不需要开放,要求就是给数据生成一个 8 位纯数字的序列号,本身不需要包含什么含义,只要能通过序列号找到这个数据,不重复。
数据量也很小,可能一年都不会超过 1000 个,所以我在数据库设置了唯一索引后直接就用生成随机数的函数了,如下:
mt_rand(10000000,99999999);
但刚好我同事看到,说建议我改成:
str_shuffle(mt_rand(10000000,99999999));
说这样更好,更随机,重复的概率更低。
感觉不太对劲,我个人感觉这样不会更随机吧?但我对函数的底层的东西没什么深入研究。
我 google 了一下,但我可能搜索姿势不太对没找到完全相同的场景,但我看到有类似的代码,答案有提到说 str_shuffle 不会增加额外的熵。
是不是就是意思这样做不会增加随机性也不会让重复的概率变低?
所以发这个贴子来问问大家,谢谢!如果有相关的资料可以让我加深理解就更好了!

函数, mt_rand, 序列号, PHP

june4   
你不是应该要你同事给出这样更随机的证明吗
infun   
分别调用个十万次看看先?
sadfQED2   
啊?如果随机出来的数是 1000000 ,你 str_shuffle 之后变成 00000001 ,这不会出问题吗?
我没看过 mt_rand 的实现方法,但是如果每个数出现概率一样的话,你再加个打乱逻辑的话,纯粹脱了裤子放屁。
如果 mt_rand 每个数出现概率不一样的话,那这样打乱一下有意义
maggch97   
你要做的是处理出现重复数字之后的异常处理,这个概率并不低。
dobelee   
觉得随机买一张彩票概率太低,于是买了十张,手动混一混,再从里面选一张。
imdong   
对于你描述的场景,二者没法证明有实质意义的区别。
如果真的需要安全的随机数,我觉得你们需要的不是更随机的随机数,而是更可控的随机数。
说白了,就是需要一个看起来是随机但实际上不是随机的随机数。
passive   
两个均匀分布相加或者嵌套不再是均匀分布,无数个均匀分布相加或者嵌套最后会变成正态分布🐶
way2create
OP
  
@maggch97 这个有做的 而且实际上并不是单纯 8 位 还有别的 这里省略了 就是好奇问的问题
way2create
OP
  
@sadfQED2 谢谢,你说的很有道理,变成 00000001 从我给的代码来看也是个问题,不过还好实际的场景不在乎这个,我这里只是用例子来表达我要问的问题,是我的疏忽。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部