PHP唯一的10位数字str_shuffle

时间:2010-11-22 15:58:49

标签: php numbers unique digit

假设我有一百万个10位数的唯一数字。如果我为100万个数字中的每一个做一个str_shuffle,它的唯一性是否仍然保持?请建议


谢谢你们一些清晰,但问题仍然存在。实际上,我所说的百万个nos都是唯一的数字(实际上它们是10位数的移动号码)。我想给这些客户提供这些百万美元但是我不希望他们有实际的数字。因此,我需要随机化每个数字并生成一个等效的10位数唯一数字,我可以给客户端,并保持我的数据库中的映射。我正在寻找总和算法,而不是为脚本做很多处理,否则我确信如果我遵循传统的数组和东西的路径,脚本将会崩溃

7 个答案:

答案 0 :(得分:7)

没有

str_shuffle('1234567890')可能会给你“3124567890”。

str_shuffle('9876543210')也可能会给你“3124567890”等等。

答案 1 :(得分:4)

很明显答案是肯定的。

对不关心所有其他数字的单个数字的任何修改都可能导致重复。

随机改组是一种修改,因为它只是将数字混合在一个数字中,所以很有可能获得重复(那里有任何数学家想要计算概率?期待对此有一些评论。)

答案 2 :(得分:2)

据我所知,默认情况下,str_shuffle不是唯一的。它只是随机地改变了字符串。从理论上讲,所有100万个数字都可能是相同的。

答案 3 :(得分:2)

反例:

<?php

$unique_numbers = array('101', '110');

foreach($unique_numbers as $number){
    echo str_shuffle($number) . PHP_EOL;
}

我得到了:

011
011

答案 4 :(得分:2)

问题陈述表明你实际上可能希望改组数组元素,而不是那些元素的内容。也许你能够保持唯一性但通过交换数组的元素一段时间来随机分布 - 即交换随机元素A和随机元素B进行N次迭代。

答案 5 :(得分:2)

你正在寻找的是一个排列脚本,我碰巧有你。

function permuteString($str) 
{ 
    $aStr = str_split($str); 
    $iSize = count($aStr); 
    $aResult = array(); 

    for ($i = 0; $i < $iSize; ++$i) 
    { 
        $sFirst = array_shift($aStr); 
        $aInner = $aStr; 
        $iInner = count($aInner); 
        for ($j = 0; $j < $iInner; ++$j) 
        { 
            $aResult[] = $sFirst . implode('', $aInner); 
            $sTmp = array_shift($aInner); 
            $aInner[] = $sTmp; 
        } 
        $aStr[] = $sFirst; 
    } 
    return $aResult; 
} 

$userinput="1234567890"; 
print_r(permuteString($userinput));

这将打印给定userinput变量的每个可能的排列。

答案 6 :(得分:1)

取决于您将'uniqueness'定义为。

当你说100万套10位数字时,如果你想在所有这些数字上使用str_shuffle,然后当你说唯一时,你的意思是100万个10位数中的至少1个洗牌前电话号码不存在或者什么?如果是这样,请看这里:

10!是3628800.这大大超过了100万。因此,即使是三分之二的机会,所有数字都是随机的。

这意味着,如果您对所有数字使用str_shuffle,则无论您定义的是什么,最有可能(超过66%的机会)获得“唯一”设置。