勉強したことのメモ

webプログラマが勉強したことのメモ。

PHPでユニークな文字列の作成

   

PHPでユニークな文字列を作成したかった。MySQLとかのオートインクリメントの値ではなく、推定されにくいランダムな英数字が良かった。あと、出来るだけどのような状況でも共通して使いたいので、モジュールとか別途インストールはせず標準の関数とかだけで対応したかった。

調べたところ、簡単そうなのはuniqidという関数が良さそう。

 

echo md5(uniqid(rand(), true)); //196b4afca8e923b2ac60a9d575098eab

 

他にはV4のUUIDを作成する関数というのも見つかった。

 

function gen_uuid() {
	$uuid = array(
		'time_low' => 0,
		'time_mid' => 0,
		'time_hi' => 0,
		'clock_seq_hi' => 0,
		'clock_seq_low' => 0,
		'node' => array()
	);

	$uuid['time_low'] = mt_rand(0, 0xffff) + (mt_rand(0, 0xffff) << 16);
	$uuid['time_mid'] = mt_rand(0, 0xffff);
	$uuid['time_hi'] = (4 << 12) | (mt_rand(0, 0x1000));
	$uuid['clock_seq_hi'] = (1 << 7) | (mt_rand(0, 128));
	$uuid['clock_seq_low'] = mt_rand(0, 255);

	for ($i = 0; $i < 6; $i++) {
		$uuid['node'][$i] = mt_rand(0, 255);
	}

	$uuid = sprintf(
		'%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x',
		$uuid['time_low'],
		$uuid['time_mid'],
		$uuid['time_hi'],
		$uuid['clock_seq_hi'],
		$uuid['clock_seq_low'],
		$uuid['node'][0],
		$uuid['node'][1],
		$uuid['node'][2],
		$uuid['node'][3],
		$uuid['node'][4],
		$uuid['node'][5]
	);

	return $uuid;
}

 

■参考サイト

http://www.freeshow.net.cn/ja/questions/e65739bee30615391104e1011a79c2860b4606475ca21e202c0e1ec808e932d4/

 - PHP

  関連記事

PHPでプロキシ経由で他サーバーに接続

PHPでfile_get_contentsやcurlで他サーバに接続する際に自サ ...

PHPバージョンの確認

PHPでバージョンの確認をする際にphpinfo()を 使って調べてたけど、バー ...

フォルダにリンク制限をかける

imgというフォルダがあり、直接URLを叩いても 中身を見られないけど、同一サー ...

PHPの配列でキーの最大値を取得

PHPの配列でキーの最大値を取得したかった。以下で対応する。 $test = a ...

phpMyAdminより高速で軽量なAdminerが凄い

MySQLをGUIで管理できるphpMyAdmin。特に不満はないんだけど、もっ ...

PHPとSQLiteで簡易BBSの作成

PHPとSQLiteの練習で簡易掲示板を作ったのでメモ。   &nbs ...

PHPの構文チェック

JSONLINTみたいにオンラインで構文チェックを できるサイト様があったのでメ ...

setcookieで「Cannot modify」エラー

PHPでsetcookieを使うと「Warning: Cannot modify ...

imgタグとPHPでグラフ作成

プラグインやライブラリを使わずにグラフを作る 機会があったのでメモ。 ■サンプル ...

PHPでコマンドを実行して画像を加工

PHPで画像をリサイズしたりサムネイルを作ろうとすると、 ソースが長くなって面倒 ...