kakakakakku blog

Weekly Tech Blog: Keep on Learning!

PHPでユニークなIDを生成する:uniqid()

PHPでユニークな(一意な)IDを生成したい場合に「uniqid」という関数が利用できる.

string uniqid ([ string $prefix [, bool $more_entropy ]] )
マイクロ秒単位の現在時刻にもとづいた、接頭辞つきの一意な ID を取得します。
PHP: uniqid - Manual

$prefixなし

$prefix(接頭辞)なしで利用すると,13文字の文字列が生成される.
[例] 48f7146e6ea07

<?php
	echo uniqid();
	echo uniqid("");
?>

$prefixあり

$prefixに任意の文字列を指定すると,接頭辞の後に13文字の文字列が生成される
[例] UNIQ_48f718480b738

<?php
	echo uniqid("UNIQ_");
?>

$prefixに乱数を指定する

マイクロ秒単位で変化するユニークIDとは言え,たかがマイクロ秒なので,同じマイクロ秒であれば同じIDが生成されてしまう.
そこで,$prefixに乱数を指定することで,同じマイクロ秒でも異なるIDを生成することができる.
桁を揃えたければ,乱数の生成範囲を限定すればよい.

<?php
	echo uniqid(rand());
?>

$more_entropyをTRUEに

第二引数の$more_entropyをTRUEにすると,より細かなIDが生成される.
[例] 48f71b74d97242.89046663

<?php
	echo uniqid("",1);
?>

ユニークIDのハッシュ値を取る

より安全な(推測されにくい)文字列を得たい場合は,uniqid()で生成されたユニークIDのハッシュ値を取ればよい.
[例] 846189340160532f6c51bf26ab596f55

<?php
	echo md5(uniqid(rand(),1));
?>