一意の番号を生成する方法

WBOY
WBOYオリジナル
2016-06-23 13:55:153023ブラウズ

たとえば、タイムスタンプが生成され、それが一意であることを確認するためにそれを処理する方法を考えてみましょう。 。


ディスカッションへの返信 (解決策)

time().mt_rand(100000,99999).mt_rand(100000,999999)

絶対的な一意性の保証はありません。

タイムスタンプは秒単位で一意です
php が提供する最小時間解像度はマイクロ秒です

マイクロ秒+???

function uninum(){	list($sec, $usec) = explode(' ',microtime());	return str_replace('.','',sprintf('%f',$sec + $usec).mt_rand(100000,999999));}echo uninum();

タイムスタンプは秒単位で一意です
php が提供する最小時間解像度はマイクロ秒です

ハハマイクロ秒は

time()

Click は一意性を保証できません

時間 + データベースの一意の番号??>一意の番号

乱数などを接続するにはマイクロ秒関数を使用します すでに良好な一意性を持っています

タイムスタンプ + ランダムを使用します

たとえば、タイムスタンプは 445656623323
の後に 5 桁の乱数が続きます

主に、基本的に重複がないことを保証できますが、重複がないことは保証できませんが、繰り返し発生した場合、その確率は1回2元の宝くじを10回か20回以上連続で買うのと同じだ。

5 桁の乱数が十分ではないと思われる場合は、サーバーが保持できる場合は、乱数を 20 桁または 30 桁に増やすことができ、その確率は明日エイリアンを見るのと同等です。


もちろん、まだ心配な場合は、他の 2 つの方法があります。タイムスタンプ + IP アドレスの組み合わせ + 2 つまたは 3 つの乱数です。これは決して繰り返されません

もう 1 つの方法は、データベースに書き込む前です。 、同じものが存在するかどうかを確認し、存在する場合は乱数を再生成します。

タイムスタンプ + ランダムを使用します

たとえば、タイムスタンプは 445656623323
の後に 5 桁の乱数が続きます

主に、基本的に繰り返さないことを保証できますが、決して繰り返さないことを保証することはできません。 , もしそうなった場合、その確率は、1回2元の高額宝くじを買うのと同じで、10回、20回以上連続で当たる可能性があります。

5 桁の乱数が十分ではないと思われる場合は、サーバーが保持できる場合は、乱数を 20 桁または 30 桁に増やすことができ、その確率は明日エイリアンを見るのと同等です。


もちろん、それでも心配な場合は、他の 2 つの方法があります。タイムスタンプ + IP アドレスの組み合わせ + 2 つまたは 3 つの乱数です。これは決して繰り返されません

もう 1 つの方法は、データベースに書き込む前です。 、同じものが存在するかどうかを確認し、存在する場合は乱数を再生成します。



PHP date の最新バージョンでは、ミリ秒を表示できる u が追加されました。
実際、最も安全な一意の番号は間違いなく時間に基づいています。

1) microtime(true)
2) uniqid()
3) ユーザー IP + ブラウザヘッダー + タイムスタンプに基づく

タイムスタンプ + md5 (文字列)

mysql テーブルの自動インクリメント ID を使用することもできます固有の番号として

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。