PHPでランダムIDを生成するランダムな文字列を生成する

PHPでランダムIDを生成するランダムな文字列を生成する

このコードは、PHPを使用して安全かつ高強度なランダムID(トークン)を生成するための関数です。セキュリティ性の高い乱数生成を実現し、ログイン認証、APIキー、CSRFトークンなどの用途に適したランダムな文字列を作成します。

セキュアな64文字ランダムトークン生成PHPコード

function ope_crypto_rand_secure($min, $max)
{
    $range = $max - $min;
    if ($range < 0) {
        return $min;
    }
    // not so random...
    $log = log($range, 2);
    $bytes = (int) ($log / 8) + 1; // length in bytes
    $bits = (int) $log + 1; // length in bits
    $filter = (int) (1 << $bits) - 1; // set all lower bits to 1
    do {
        $rnd = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes)));
        $rnd = $rnd&$filter; // discard irrelevant bits
    } while ($rnd >= $range);
    return $min + $rnd;
}

function ope_getToken($length)
{
    $token = "";
    $codeAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    $codeAlphabet .= "abcdefghijklmnopqrstuvwxyz";
    $codeAlphabet .= "0123456789";
    $codeAlphabet .= "[]_-()|,~.^?/$&`{};+@#";
    for ($i = 0; $i < $length; $i++) {
        $token .= $codeAlphabet[ope_crypto_rand_secure(0, strlen($codeAlphabet))];
    }
    return $token;
}

$ope_token = ope_getToken(64); // 64文字のランダム文字列を生成する

用語解説

🛡️ ope_crypto_rand_secure($min, $max)

  • 暗号的に安全な乱数バイトを使用し、$min から $max の範囲内の整数を返す
  • openssl_random_pseudo_bytes() + ビットフィルタリングで偏りを除去

🧪 ope_getToken($length)

  • 英大文字、小文字、数字、記号を含むランダム文字列を生成
  • 例えば ope_getToken(64) は 64文字のユニークなIDを出力

まとめ

このPHPコードは、セキュリティ要件が高いWebシステムにおいて必要とされる「ランダム性」と「予測不可能性」を兼ね備えたトークンを生成するために設計されています。openssl_random_pseudo_bytes() を使用することで、従来の rand()mt_rand() よりも安全性が高くなっています。

関連記事
IT業界の初心者が知っておくべきの用語(2025版)
新しいテクノロジーについて話すとき、時々自分がみんなのペースについていけないと感じることはありませんか?あるいは、その業界にいるのに、自分はまだ十分ではないと感じ、多くの専門用語を理解しなければならないこともあるでしょう。
Details
Details
11ヶ月前
IT業界の初心者が知っておくべきの用語(2025版)
WordPressサイトでメルマガ運用する時の注意点|簡単にできることには注意が必要でやんす。
「一括管理って響き最高!」だけど…WordPressでメルマガ配信するならセキュリティにご用心!メリットと落とし穴、そしてBenchmark Emailの使い方まで、編集長がゆるっと解説!
WASABI
WASABI
10ヶ月前
WordPressサイトでメルマガ運用する時の注意点|簡単にできることには注意が必要でやんす。
ABテストとは?赤か青か?データが導く最適な選択
ABテストは、今やデジタルマーケティングの「常識」となった科学的な意思決定手法です。日本のECサイトやアプリ開発の現場でも、「どちらのデザインが効果的か」「どんなキャッチコピーが響くか」を決める際に頻繁に活用されています。 この手法のルーツ […]
解構人
解構人
10ヶ月前
ABテストとは?赤か青か?データが導く最適な選択
PHPでMySQLのバージョンを確認する方法
PHPを使ってMySQLのバージョンを取得する方法には、mysqli_get_server_info()、PDO::getAttribute()、および SELECT VERSION() という3つの一般的な方法があります。それぞれの方法でMySQLへの接続が必要です。
Details
Details
11ヶ月前
PHPでMySQLのバージョンを確認する方法
SEOは聞いたことありますよね?ではGEOってご存知ですか?|生成エンジン最適化(GEO)の重要性や必要なことをまとめました!
SEOは知ってるけどGEOは初耳?AI時代に欠かせない「生成エンジン最適化(GEO)」の意味・必要性・対策ポイントを初心者向けにやさしく解説!
WASABI
WASABI
10ヶ月前
SEOは聞いたことありますよね?ではGEOってご存知ですか?|生成エンジン最適化(GEO)の重要性や必要なことをまとめました!
PHPのcheckdnsrr関数徹底解説:メールアドレス検証での活用方法
目次 フォーム開発で遭遇した課題 checkdnsrr関数とは? 主な用途 メールアドレスのドメイン検証 ドメイン存在確認 SPFレコードチェック ネットワーク診断ツール メリット デメリットと制限事項 実際の活用例 基本的なメールドメイン […]
解構人
解構人
10ヶ月前
PHPのcheckdnsrr関数徹底解説:メールアドレス検証での活用方法
同一ドメイン配下の複数アプリケーションにおけるCSRF対策ガイド
目次 1. 技術的背景と適用シナリオ 代表的な適用例 技術的利点 潜在的なリスク 2. CSRF保護メカニズムの基本原則 保護の三要素 3. 複数アプリケーション環境におけるセキュリティ課題 3.1 セッション命名衝突の深層的影響 具体的な […]
解構人
解構人
11ヶ月前
同一ドメイン配下の複数アプリケーションにおけるCSRF対策ガイド
PHPでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
auto_copyright() 関数は、動的に著作権の年数を出力します。引数として開始年を受け取り、現在の年と比較して、単一年または範囲(例: 2015 - 2025)を表示します。
Details
Details
1年前
PHPでウェブサイトのフッターにあるCopyrightの年数範囲を自動更新する
JavaScriptでURL(パス)からファイル名を取得する
window.location.pathname でURLのパス部分を取得。 lastIndexOf('/') で最後のスラッシュ位置を検出。 substring でスラッシュの次から最後までを切り出し、ファイル名を抽出。
Details
Details
1年前
JavaScriptでURL(パス)からファイル名を取得する
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
2025年最新の画像遅延読み込み(Lazy Load)完全ガイド。ネイティブloading="lazy"とIntersectionObserverの使い分け・実装例・SEOやLCPへの最新対応ポイントまで徹底解説。パフォーマンスと検索順位アップのための必読ノウハウ!
aki0o0
aki0o0
1年前
画像の遅延読み込みはこう変わる!2025年最新版・Lazy LoadとIntersectionObserverの最適解
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
はじめに Webサイトの表示速度や操作感は、単にコンテンツの量や見た目だけでなく、ブラウザがリソースをどのように読み込むかによっても大きく左右されます。特にJavaScriptや画像の読み込み順序、そしてそれらがどのように相互作用しているか […]
解構人
解構人
11ヶ月前
フッターのJavaScriptは画像読み込みに影響する?ブラウザの読み込み順と最適化の基本
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
2025年6月最新版のTIOBEインデックスから、今人気のプログラミング言語を解説。Python、C、C++、Javaなどの注目度や、インデックスの活用方法も紹介します。
解構人
解構人
11ヶ月前
【2025年6月最新版】TIOBEインデックスで見る人気プログラミング言語ランキングとは?
ユーザーのブラウザに保存されているJavaScript、CSS、画像のキャッシュを削除するにはどうすればいいですか?
ブラウザのキャッシュによる古いJavaScript、CSS、画像の表示を防ぐには、URLにバージョン番号や日時パラメータを付けてリソースを更新する方法が有効です。 毎回タイムスタンプを使うとキャッシュ効果がなくなるため、手動や適切なタイミングでバージョン番号を管理するのがおすすめです。
Details
Details
1年前
ユーザーのブラウザに保存されているJavaScript、CSS、画像のキャッシュを削除するにはどうすればいいですか?
PHPの hash_equals 関数とは?なぜ == や === を使わないのか?
hash_equals は PHP において、2つの文字列が等しいかを安全に比較するための関数です。特にパスワードのハッシュや署名の検証などで使われます。== や === といった通常の比較演算子とは異なり、タイミング攻撃(Timing A […]
解構人
解構人
10ヶ月前
PHPの hash_equals 関数とは?なぜ == や === を使わないのか?
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法
このjQueryコードは、トグルボタンの状態に応じてナビゲーションを開閉し、背景のスクロールを動的に制御します。クラス名 back をトリガーとして、html 要素に適切なスタイルを適用し、快適なフルスクリーンUIを提供します。
Details
Details
1年前
【jQuery】フルスクリーンナビゲーション時に背景のスクロールを無効にする方法