Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

環境: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埋めです。
jonsumisu
もし誰かのお役に立てたのなら、恐悦至極に存じます。
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした