从具有唯一数字的模式中获取随机数

发布于 2024-11-28 07:00:13 字数 203 浏览 1 评论 0原文

假设模式是 123456。

在 php 中,是否可以获取长度精确的六位数字,并且数字在生成的编号中不应重复一次以上。

456136 -- all digit are unique right

56136 -- wrong digit 4 is missing
456436 -- wrong digit 4 repeats

Let say if pattern is 123456.

In php is it possible to get number exact six digits in length and digit should not repeat more than once in generated no.

456136 -- all digit are unique right

56136 -- wrong digit 4 is missing
456436 -- wrong digit 4 repeats

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

假情假意假温柔 2024-12-05 07:00:13

如果您需要 1-6 位数字

str_shuffle('123456');

如果您需要 1-9 位数字

substr(str_shuffle('123456789'),0,6);

手动

If you need 1-6 digits

str_shuffle('123456');

If you need 1-9 digits

substr(str_shuffle('123456789'),0,6);

Manual

叫思念不要吵 2024-12-05 07:00:13

您可以首先使用 str_split() 将模式拆分为数字数组

$pattern = '123456';
$digits = str_split($pattern);

然后,您可以使用 shuffle()< /strong> 在该数组上,因此它的元素是随机顺序的:

shuffle($digits);

最后,您可以 implode()将随机数组恢复为字符串:

$result = implode('', $digits);

转储该变量的内容:

var_dump($result);

您将得到如下结果:

string(6) "645132"
string(6) "462513"
string(6) "542316"

始终是六位数字,始终是您指定的数字;并且没有一个使用次数超过模式中指定的次数。

You could start by splitting your pattern into an array of digits, using str_split() :

$pattern = '123456';
$digits = str_split($pattern);

Then, you could use shuffle() on that array, so its elements are in random order :

shuffle($digits);

And, finally, you can implode() that randomized array back to a string :

$result = implode('', $digits);

Dumping the content of that variable :

var_dump($result);

You'll get results like these ones :

string(6) "645132"
string(6) "462513"
string(6) "542316"

Always six digits, always the digits you specified ; and none used more times than specified in the pattern.

删除→记忆 2024-12-05 07:00:13

这应该会给你 0 次重复:

$random = array();
while(count($random) != 6)
{
    $random[] = rand(0, 9);
    $random = array_unique($random);
}
$random = implode('', $random);

This should give you 0 repeats:

$random = array();
while(count($random) != 6)
{
    $random[] = rand(0, 9);
    $random = array_unique($random);
}
$random = implode('', $random);
半暖夏伤 2024-12-05 07:00:13

您可以尝试以下操作:

$nums = array();

while(count($nums)<=6){
    $rand = rand(0,9);
    if(!in_array($rand, $nums)){
         $nums[] = $rand;
    }
}

echo implode('',$nums);

演示:

第一次运行:
http://codepad.org/31AKqeYz
第二次运行: http://codepad.org/ckuUQCP3

You can try this:

$nums = array();

while(count($nums)<=6){
    $rand = rand(0,9);
    if(!in_array($rand, $nums)){
         $nums[] = $rand;
    }
}

echo implode('',$nums);

Demo:

1st Run:
http://codepad.org/31AKqeYz
2nd Run: http://codepad.org/ckuUQCP3

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文