PHP - よく使う関数 - 数学

 クラウディア
1. 概要
2. 最大・最小
3. 最大・最小
4. 乱数

1. 概要

 数学関数の詳細は「PHP マニュアル - 関数リファレンス - 数学」をご参照ください。

2. 変換

 「PHP: hexdec - Manual」をご参照ください。

hexdec(string $hex_string): int|float
 は、16進値を表す文字列を、10進値へ変換します。

print(hexdec('10'));
 と書けば、下記のように出力されます。

164857659097122

3. 最大・最小

 「PHP: max - Manual」「PHP: min - Manual」参照。  最大値・最小値を求めるには

max(mixed $value, mixed ...$values): mixed

min(mixed $value, mixed ...$values): mixed
 を使用します。  引数は1つ以上であればいくらでも?  引数が配列であれば、配列の中で一番大きいもの・小さいものを取得するようです。

4. 乱数

 もっともお手軽なのは

rand(): int

rand(int $min, int $max): int
 です。「PHP: rand - Manual」参照。  下の例の場合、生成する乱数の最小値、最大値を指定しています。  指定していない場合は、最小値が 0 で、最大値が「getrandmax())」の値だそうです。  ただ、これで生成する乱数は、「暗号学的に安全」ではないそうです。  「暗号学的に安全な値が必要な場合は、random_int() か random_bytes() あるいは openssl_random_pseudo_bytes() を使いましょう。」と書いてあります。  同様に「暗号学的に安全」ではないそうですが、「メルセンヌ・ツイスター乱数生成器を介して乱数値を生成する」(← 意味は理解していません)関数があります。  「PHP: mt_rand - Manual」参照。

mt_rand(): int

mt_rand(int $min, int $max): int
 使用方法は、「rand」と同様なのですが、「既知の乱数生成器 » メルセンヌ・ツイスター を使用し、 平均的な libc の rand()よりも 4 倍以上高速に乱数を生成します。」だそうです。  「csrf」対策のキーを自動的に生成する方法として(「【PHP入門】ランダムな数値・文字列を生成する(rand、mt_rand)」を参考に)

$csrf = '';

for ($i=0; $i<40; $i++)
{
	switch (mt_rand(1, 10))
	{
	case 1:
	case 2:
	case 3:
	case 4:
		$csrf .= chr(mt_rand(ord('A'), ord('Z')));
		break;

	case 5:
	case 6:
	case 7:
	case 8:
		$csrf .= chr(mt_rand(ord('a'), ord('z')));
		break;

	default:
		$csrf .= chr(mt_rand(ord('0'), ord('9')));
		break;
	}
}

print($csrf);
 と書けば、下記のように出力されます。  (当然、実行ごとに結果は変わります)

3Y58RJAuSJByqjqEiyWyeW7kw7SMVrOHhvDCTj0Y
 これで生成した「$csrf」は、「csrf」対策のキーとして使えるはずです(未検証)。
ハイスピードプラン