【问题标题】:Generate random number of 6 digit length with at-least n unique digits in php在php中生成具有至少n个唯一数字的6位长度的随机数
【发布时间】:2017-11-30 19:07:21
【问题描述】:

谁能给我实现这个逻辑的想法。我知道如何生成随机数,但不知道如何使用至少两个唯一数字

谢谢。

适用规则:

都是独一无二的。
4 个唯一数字和 2 个重复数字。
3 个唯一数字和 3 个重复数字。
2 个唯一数字和 4 个重复数字。
需要用以上四个规则组成数字

规则不适用:

1 个唯一数字和 5 个重复数字。
0 个唯一数字和 6 个重复数字。
这两条规则组成的数字是不必要的

数字可以是这样的:

123456334567、444567、555567等,

这些组合是不允许的:

111111 222222 333333 444444 555555 666666 777777 888888 999999

122222 133333 .. .. 199999

222666 666777 等等,。

将此问题标记为否定并标记为重复的人可以在下方发表评论,指定解释的位置。在发布这个问题之前我探索了很多,没有找到我需要的,所以来到这里。希望大家帮帮我。

【问题讨论】:

  • @nogad 我没有找到对我的问题的任何解释,请你解释一下。我们如何才能拥有至少两个唯一的数字?
  • @ThomasSmyth 我只是在生成一个像这样的随机数 $randompassword = mt_rand(100000,999999);
  • @Kevin_Kinsey 我的问题没有任何解决方案。谢谢。

标签: php


【解决方案1】:

提问者评论:4 个唯一数字和 2 个重复数字。但他们也应该有 3 个独特的 和 3 个重复数字,2 个唯一数字和 4 个随机重复数字 号码。

好的,我想我终于明白了,所以我调整了算法以匹配 每条可能的规则,您期望从 0 到 6 唯一,如您所见,我的原始答案代码没有太大变化。我什至添加了一个排序标志,以便对 int 的 incase 进行排序,这也是一个要求。我下定决心!!

<?php
//
function random_number_with_dupe($len = 6, $dup = 1, $sort = false) {
    if ($dup < 1) {
        throw new InvalidArgumentException('Second argument is < 1');
    }        

    $num = range(0,9);
    shuffle($num);

    $num = array_slice($num, 0, ($len-$dup)+1);

    if ($dup > 0) {
        $k = array_rand($num, 1);
        for ($i=0; $i<($dup-1); $i++) {
            $num[] = $num[$k];
        }
    }

    if ($sort) {
        sort($num);
    }

    return implode('', $num);
}

都是独一无二的。

for ($i=0; $i<5; $i++) {
    echo random_number_with_dupe(6, 1, true).PHP_EOL;
}
/*
124579
123679
013568
015789
013578
*/

4 个唯一数字和 2 个重复数字。

for ($i=0; $i<5; $i++) {
    echo random_number_with_dupe(6, 2, true).PHP_EOL;
}
/*
235699
037789
034677
012249
033569
*/

3 个唯一数字和 3 个重复数字。

for ($i=0; $i<5; $i++) {
    echo random_number_with_dupe(6, 3, true).PHP_EOL;
}
/*
015559
011147
111239
677789
456777
*/

2 个唯一数字和 4 个重复数字。

for ($i=0; $i<5; $i++) {
    echo random_number_with_dupe(6, 4, true).PHP_EOL;
}
/*
068888
022229
018888
333378
000058
*/

1 个唯一数字和 5 个重复数字。

for ($i=0; $i<5; $i++) {
    echo random_number_with_dupe(6, 5, true).PHP_EOL;
}
/*
788888
066666
799999
355555
244444
*/

0 个唯一数字和 6 个重复数字。

for ($i=0; $i<5; $i++) {
    echo random_number_with_dupe(6, 6, true).PHP_EOL;
}
/*
888888
333333
777777
888888
777777
*/

所有规则。

for ($i=0; $i<6; $i++) {
    echo random_number_with_dupe(6, $i+1, true).PHP_EOL;
}
/*
345789
003569
245666
000089
777778
555555
*/

所有规则(随机)。

for ($i=0; $i<6; $i++) {
    echo random_number_with_dupe(6, mt_rand(1, 6), true).PHP_EOL;
}
/*
225678
222222
111359
444444
777778
233349
*/

工作示例:

https://3v4l.org/3OCkc

原创

这样怎么样,每个数字都是唯一的。使用 0 到 9 作为熵,然后洗牌。

<?php
function random_number($len = 6) {
    $num = range(0,9);
    shuffle($num);
    return implode('', array_slice($num, 0, $len));
}

for ($i=0; $i<10; $i++) {
    echo random_number(6).PHP_EOL;
}

结果:

357964
365870
392576
285196
278915
712960
751032
517420
943257
380162

编辑

提问者评论:这个我可以做到,但要求不同。他们需要 至少 2 个唯一数字。有 1 个重复

<?php
function random_number_with_1_dupe($len = 6) {
    $num = range(0,9);
    shuffle($num);

    $num = array_slice($num, 0, $len-1);

    $dup = array_rand($num, 1);
    $num[] = $num[$dup];

    return implode('', $num);
}

for ($i=0; $i<10; $i++) {
    echo random_number_with_1_dupe(6).PHP_EOL;
}

564795
698756
937414
760897
706383
784626
520166
614055
798057
295809

编辑 v4.0

我需要一个没有这两条规则的随机数:1 唯一和 5 重复的数字。 0 个唯一数字和 6 个重复数字。适用规则 : 都是独一无二的。 4 个唯一数字和 2 个重复数字。 3 独特和 3 重复的数字。 2 个唯一数字和 4 个重复数字。

第二个参数是规则,所以你会这样做:

echo random_number_with_dupe(6, mt_rand(1, 4), true).PHP_EOL;

如果你想要介于两者之间的东西,你可以定义一个规则数组并随机挑选一个。

$rules = [
    1,3,5
];

echo random_number_with_dupe(6, $rules[array_rand($rules)], true);

【讨论】:

  • 这个我可以做到,但要求不同。他们需要至少 2 个唯一的数字。谢谢兄弟。
  • 他们需要至少 2 个唯一的号码,他们的全部都是唯一的!如果您想要 2 个 相同 的数字在同一个数字中,则从范围中随机选择一个,然后在 array_slice 中选择一个更少的数字,然后将其放入。
  • 补充一点,123456 如何满足您的要求?
  • 至少两个唯一数字意味着,它可以是两个或三个或四个或五个或六个唯一数字。所以在 123456 中都是独一无二的,符合公司的要求..
  • 那我的回答也是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-06-26
  • 2012-10-21
相关资源
最近更新 更多