2024-05-23
今日のラッキーナンバー
ウェブサイトに気休めに「今日のラッキーナンバー」などを表示させようと思うことありますよね。
さて、「今日の」ラッキーナンバーが訪問の度に変わってしまうのは良くないわけです。その日はずっと同じ結果を表示しなければなりません。
結論からいうと、今日1日は変わらないSEEDを設定してやれば良いわけです。その日は不変ですが明日になれば変わるもの、例えば日付です。
参考コードでは、本日の日付、「宝くじドリーム館」の緯度・経度(固定)、IPアドレス(個人で固定)を単純に掛けてみました。これを書いている今日木曜日はロト6の抽選日だったので……
<?php // 現在の日付を取得し、それを乱数のシードとして使用する $date = date('Ymd'); $longitude = 35.676150495101; $latitude = 139.77092664931; $ip_address = $_SERVER['REMOTE_ADDR']; $numeric_ip = ip2long($ip_address); $seed = $date * $longitude * $latitude * $numeric_ip; mt_srand(crc32($seed)); // 1から42までの整数の配列を作成 $numbers = range(1, 42); // 6つの乱数を選択 $selected_numbers = []; for ($i = 0; $i < 6; $i++) { $index = mt_rand(0, count($numbers) - 1); $selected_numbers[] = $numbers[$index]; unset($numbers[$index]); $numbers = array_values($numbers); } // 選択された数字を昇順にソート sort($selected_numbers); ?> <h1>Your Lucky Numbers Today</h1> <ul class="special-num"> <?php foreach ($selected_numbers as $number): ?> <li><?php echo $number; ?></li> <?php endforeach; ?> </ul>