我的號碼範圍爲1-62 我希望能夠「隱藏」它們,因此很難猜測它們是以某種順序生成的。重新排序號碼
因此,它應該有一些映射,例如
1-> 35 2-> 19 3-> 61 ...
,這樣我有1對1映射,100 %可逆。
我可以硬編碼的映射,但我寧願數學解決方案是,某種式這需要數作爲參數,並在範圍1-62產生數,並且不產生重複。這個公式存在嗎?
只是爲了歷史,驗證腳本:
<?
$test = array();
$val = 37;
for($i=0;$i<62;$i++)
{
if($test[($i*$val)%62])
{
print("Collision: $i ".$test[($i*$val)%62]."<br/>");
}
$test[($i*$val)%62] = $i;
print("$i => ".(($i*$val)%62)."<br/>");
}
?>
更新:
下面是IDS生成由於這些問題的答案:
qpOLHk
NMb84H
aI740D
x5urn0
UsROKn
hPeb7K
EcByu7
1zYVRu
oWlieR
LjIFBe
8G52YB
v3splY
SqPMIl
fNc95I
Cazws5
ZxWTPs
mUjgcP
JhGDzc
6E30Wz
Sweeeeeet :-)
這適用於我正在考慮的硬編碼。靜態種子會做,但我擔心它太多的處理,我需要一些簡單的... – BarsMonster 2010-12-12 02:50:40
@BarsMonster:允許多少處理?你認爲這個算法的哪一部分太貴了? – 2010-12-12 02:56:21
這將在解釋型語言中每秒執行10,000次。雖然我看到你的解決方案可能符合性能,但我真的很喜歡output =(input + 35)%62,但更隨意一些。 – BarsMonster 2010-12-12 03:01:15