勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ

PHPにてユニークかつランダム英数字の文字列を作成する方法

   2024/04/16  PHP

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

 

uniqid関数を使う場合

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

 

UUID v4を作成したい場合

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;
}

 - PHP

  関連記事

Codeigniter4でエラーログ設定、出力及び確認方法
Codeigniter4でエラーログ設定、出力及び確認方法

Codeigniter4.4.4でエラーログの設定を行い特定のファイルに出力させ ...

MySQLとPHPの「image-comparator」ライブラリを使用して類似画像検索を実装する方法
MySQLとPHPの「image-comparator」ライブラリを使用して類似画像検索を実装する方法

先日PHPで画像を比較して類似度を算出する「image-comparator」ラ ...

Opauthで「Please change the…」エラーの対応方法
Opauthで「Please change the…」エラーの対応方法

Opauthを使用中に「Notice: Please change the va ...

PHPにて指定した画像に対して、繰り返し透かし画像処理する方法
PHPにて指定した画像に対して、繰り返し透かし画像処理する方法

画像素材等のサイトで無料版の画像に対して「sample」等の透かし画像処理を行っ ...

ブラウザ上でファイルのアップ・ダウンロードが可能なTiny File Managerの利用方法
ブラウザ上でファイルのアップ・ダウンロードが可能なTiny File Managerの利用方法

ブラウザ上でファイルのアップ・ダウンロードが可能なファイルマネージャーを設置した ...