2020-07-31

PHP の uniqid をデコードする

なんか一意っぽい値を PHP で生成する場合の楽な手段として、 uniqid がある。

prefix を除いた先頭 8 桁が unixtime を 16 進数で出してるだけっぽいので、こいつが何時生成されたのかを知りたい時に、以下の手順が踏める。

ここのコメントのまま使える。more_entropyが有効な値で試す。

// <?php
$s = "5ef4f46e0e40f9.59913527";
$d = date("r",hexdec(substr($s,0,8)));
echo($d . PHP_EOL);
// Thu, 25 Jun 2020 19:01:02 +0000

しかし手前は PHP をインストールしてなくて repl を持ってない(↑ の Repl.it でやった)ので、これを PowerShell でやる!(ついでに JST)

$s = "5ef4f46e0e40f9.59913527";
(Get-Date '1970-1-1').AddSeconds([System.Convert]::ToInt32($s.Substring(0, 8), 16)).ToLocalTime()
# 2020年6月26日 04:01:02

ちょっとした小技が必要だったので覚書しておく。 無駄に PHP のコードを読んでしまった...😂