![](/img/trans.png)
[英]generate 4 digit pin using str_shuffle in php but sometime get 3 digit number
[英]PHP unique 10 digit numbers str_shuffle
假設我有一個100萬個10位數的唯一數字。 如果我為100萬個數字中的每個數字執行str_shuffle,那么是否仍將保持唯一性? 請建議
謝謝大家的澄清,但問題仍然存在。實際上,我所談論的百萬個數字都是唯一數字(實際上它們是移動數字10位數字)。我想將這百萬個數字提供給某些客戶,但我不願意因此,我需要將每個數字隨機化,並生成一個等效的10位唯一數字,該數字可以提供給客戶端並將映射保留在我的數據庫中。我正在尋找求和算法,該算法不會做很多事情處理腳本,否則,如果我遵循數組和內容的傳統路徑,我確定腳本會崩潰
沒有。
str_shuffle('1234567890')
可能會給您“ 3124567890”。
str_shuffle('9876543210')
也可能會給您“ 3124567890”,依此類推。
很明顯,答案是否定的。
對單個數字的任何修改,不關心所有其他數字,可能會導致重復。
隨機混洗是一種修改,因為它只是將數字混在一個數字中,因此很可能獲得重復(任何想計算概率的數學家?都希望對此發表評論。)
據我所知,默認情況下str_shuffle不是唯一的。 它只是隨機地隨機播放字符串。 從理論上講,一百萬個數字都可能是相同的。
反例:
<?php
$unique_numbers = array('101', '110');
foreach($unique_numbers as $number){
echo str_shuffle($number) . PHP_EOL;
}
我有:
011
011
問題陳述表明,您實際上可能希望改組數組元素,而不是這些元素的內容。 也許您將能夠保持唯一性,但是通過將數組的元素交換一會兒即可擁有一個隨機分布的集-即,將N個迭代的隨機元素A與隨機元素B交換。
您正在尋找的是一個排列腳本,我恰好為您准備。
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變量的所有可能排列。
取決於您定義“唯一性”的方式。
當您說一百萬個10位數的數字集時,如果要對所有數字使用str_shuffle
,然后說“唯一”,則意味着這100萬個10位數的電話號碼中至少有一個以前不存在改組還是什么? 如果是這樣,請看這里:
10! 是3628800。比100萬大很多。 因此,所有數字都是隨機的,甚至三分之二。
這意味着,如果在所有數字上都使用str_shuffle
,則無論您將unique定義為什么,都極有可能(超過66%的機會)獲得“唯一”設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.