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>