PHP怎么生成4位随机纯数字?重复几率要万分之一以上!怎么弄啊,急!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP怎么生成4位随机纯数字?重复几率要万分之一以上!怎么弄啊,急!相关的知识,希望对你有一定的参考价值。
如果要生成四位数字的验证码,则可以用函数:$srand=rand(1000,9999);会生成在1000到9999之间的随机数字,如果要生成位数的数字,可以更改最孝最大值。追问read()会重复的
参考技术A rand(1000,9999); 重复也是随机的一部分. 当然也可以用代码吧重复部分剔除追问我想要重复几率尽量接近0,应该怎么做?
read()重复几率没法控制啊
主要是做验证码用的
大神,怎么弄啊!
追答4位数 最多 10000 个数字 重复率 肯定很高. 要降低重复率 就数字和字母组合吧
参考技术B 《出塞》作者:王昌龄生成一个没有重复数字的随机 4 位数字
【中文标题】生成一个没有重复数字的随机 4 位数字【英文标题】:Generate a random 4 digit number with no repeating digits 【发布时间】:2021-10-23 10:29:16 【问题描述】:我有这个函数来创建一个随机的 4 位数字:
generateCode = function()
var fullNumber = [];
var digit1 = Math.floor(Math.random() * 9) + 1;
var digit2 = Math.floor(Math.random() * 9) + 1;
var digit3 = Math.floor(Math.random() * 9) + 1;
var digit4 = Math.floor(Math.random() * 9) + 1;
fullNumber.push(digit1, digit2, digit3, digit4);
this.theCode(fullNumber.join("")) ;
但我需要创建一个没有重复数字的 4 位随机数。
所以“1234”或“9673”。但不是“1145”或“5668”
有没有有效的方法来做到这一点?
【问题讨论】:
一种简单的方法:将所有数字放在一个数组中,随机排列顺序,然后从数组中选出前 4 个数字:***.com/questions/2450954/… @juvian 相关:How to randomize (shuffle) a JavaScript array? 可能有帮助:underscorejs.org/#shuffle 【参考方案1】:您可以使用this handy shuffle
函数对包含数字的数组进行洗牌,然后选择前 4 个。
function random4Digit()
return shuffle( "0123456789".split('') ).join('').substring(0,4);
function shuffle(o)
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
alert( random4Digit() );
编辑:如果你真的想要一个不以 0 开头的数字:
function random4DigitNumberNotStartingWithZero()
// I did not include the zero, for the first digit
var digits = "123456789".split(''),
first = shuffle(digits).pop();
// Add "0" to the array
digits.push('0');
return parseInt( first + shuffle(digits).join('').substring(0,3), 10);
function shuffle(o)
for(var j, x, i = o.length; i; j = Math.floor(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
alert( random4DigitNumberNotStartingWithZero() );
【讨论】:
这个方便的随机播放功能可能不那么难看:) 注意不要以0开头 @apendua 是的,但是还有很多其他方法可以做到这一点,我不想专注于这个,因为它只是一个工具,问题不是问如何 i> 洗牌一个数组;)谢谢,顺便说一句【参考方案2】:创建一个数字数组,将其随机化,然后切出前 4 个并将它们连接在一起。
var numbers = [0,1,2,3,4,5,6,7,8,9];
function shuffleArray(array)
for (var i = array.length - 1; i > 0; i--)
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
return array;
shuffleArray(numbers).slice(0,4).join('');
【讨论】:
很好,既然我已经看到了这个,我的方法就过于复杂了。【参考方案3】:这实际上取决于您希望如何解决问题。一种解决方案是将您已经使用过的数字存储在一个数组中,然后在生成数字时搜索该数组。如果生成的数字包含在数组中,那么您尝试生成另一个数字。如果您有几个不同的功能,执行这样几个不同的步骤也更容易遵循。请参阅下面包含的示例:
var checkRandomUsed = function(array, number)
return array.indexOf(number) > -1;
var getCheckedRandom = function(array)
var random = getRandomNum();
while (checkRandomUsed(array, random))
random = getRandomNum();
return random;
var getRandomNum = function()
return Math.floor(Math.random() * 9) + 1;
var generateCode = function()
var usedNumbers = [];
for (var i = 0; i < 4; i++)
usedNumbers.push(getCheckedRandom(usedNumbers));
return usedNumbers.join("");
【讨论】:
【参考方案4】:作为更新,试试这个...
const value = (new Array(4))
.map(() => (Math.floor(Math.random() * 9) + 1).toString()).reduce((p, c) => p + c);
【讨论】:
【参考方案5】:如果您可以将 0 作为第一个数字,这将是可行的:
var getNum = () => randoSequence(0, 9).slice(-4).join("");
console.log(getNum());
<script src="https://randojs.com/1.0.0.js"></script>
这将在没有 0 作为第一个数字的情况下进行:
function getNum()
var sequenece = randoSequence(0, 9).slice(-4);
return (sequenece[6] ? sequenece.slice(-4) : sequenece.slice(0, 4)).join("");
console.log(getNum());
<script src="https://randojs.com/1.0.0.js"></script>
这两个代码都使用rando.js 来简化随机性并使其更具可读性,因此如果您想使用其中任何一个,请不要忘记将脚本标记添加到 HTML 文档的头部。
【讨论】:
以上是关于PHP怎么生成4位随机纯数字?重复几率要万分之一以上!怎么弄啊,急!的主要内容,如果未能解决你的问题,请参考以下文章