少なくとも1000個の連続した番号内で繰り返したくないややユニークなコードを生成しています
これが私の機能です。数値を取り、それを別の数値で乗算し$length=5
、小数点の前の最後の桁を取ります
function createPseudoUniqueString($input,$length)
{
return substr( intval($input*738510.93067),-$length) ;
}
すべての可能性をテストする以外に、結果の数値が繰り返されないことを検証する方法はありますか?
繰り返されていないことが知られている別の選択肢はありますか
ランダムな5桁の数字を生成し、それらすべてを生成するまで繰り返されないことが保証されているカスタム線形合同法を設計できます。
LCGは、次の式を使用して乱数を生成します。
Xn + 1 =((Xn * a)+ c)mod m
5桁の数値を生成するには、mは100000(0〜99999の範囲)である必要があります。
繰り返しがないこと(「全期間」)を保証するには、次の基準を使用してaとcの値を選択する必要があります。
cとmは互いに素です
a-1はmのすべての素因数で割り切れる
mが4の倍数の場合、a-1は4の倍数です。
100000の素因数は2と5であり、4で割り切れるので、整数オーバーフローを避けるために大きすぎないように注意しながら、20 +1の倍数がaの適切な値として機能します。cの場合は、適度に大きな素数を選択します。
例:m = 100000、a = 4781、c = 62873
xの初期シード値を設定してから、を使用して前の値から各値を生成します。 $x = (($x*4781)+62873)%100000;
周期の大きい乱数ジェネレーターを使用して、生成された値を100000に変更することはできません。これは、周期の大きいRNGから生成された生の数値が繰り返されなくても、数値が保証されないためです。 mod100Kはしません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加