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());
&lt;script src="https://randojs.com/1.0.0.js"&gt;&lt;/script&gt;

这将在没有 0 作为第一个数字的情况下进行:

function getNum()
  var sequenece = randoSequence(0, 9).slice(-4);
  return (sequenece[6] ? sequenece.slice(-4) : sequenece.slice(0, 4)).join("");


console.log(getNum());
&lt;script src="https://randojs.com/1.0.0.js"&gt;&lt;/script&gt;

这两个代码都使用rando.js 来简化随机性并使其更具可读性,因此如果您想使用其中任何一个,请不要忘记将脚本标记添加到 HTML 文档的头部。

【讨论】:

以上是关于PHP怎么生成4位随机纯数字?重复几率要万分之一以上!怎么弄啊,急!的主要内容,如果未能解决你的问题,请参考以下文章

生成100万行8位纯数字的随机数(转)

用Python或者Java如何生成多位数字不重复的数

通过php生成纯数字字母数字图片纯汉字的随机数验证码

求一串完整的php代码+html php随机生成10位数字,而且永远不会重复,在一个单行文本框内输出

java 一次生成一个无重复随机

C#如何生成随机不重复的数字