Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
4
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@jonsumisu

[PHP] ランダムで指定桁の数値コードを生成(頭0埋め)

環境:PHP7.2.8

やりたいこと

  • 例えば4桁なら0023, 2428, 9876などのコードをランダムで生成したい。
  • 今回生成したいのは数値のみのコードです。文字列や記号は含みません。

実装

    // デフォルトは4桁です
    public function generateCode($length = 4)
    {
        $max = pow(10, $length) - 1;                    // コードの最大値算出
        $rand = random_int(0, $max);                    // 乱数生成
        $code = sprintf('%0'. $length. 'd', $rand);     // 乱数の頭0埋め

        return $code;
    }

説明

  • 最大値算出
    • 4桁のコードの場合、生成したいコードの範囲は00009999なので、最大値は(10^4)-1 = 9999です。
    • 桁数Nに対して、最大値は(10^N)-1となります。
    • pow(基数, 指数)で算出できます。
  • 乱数生成
    • random_int(最小値, 最大値)を使用します。
    • mt_rand()はシステム日付を使用していたりパターンを推測しやすかったりでランダム性がよろしくないみたいです。
  • 乱数の頭0埋め
    • 4桁を指定したのに乱数が123など指定桁未満の数値の場合、0123のように頭を0で埋める必要があります。
    • sprintf(フォーマット, 値)で埋めます。例えば、フォーマット%04dで4桁0埋めです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
4
Help us understand the problem. What are the problem?