やったこと

webサービスを作るときに考えたことを垂れ流します

PHPで2chの書き込みIDのような文字列を生成するアルゴリズム!

PHP2chの書き込みID風のユニークな文字列を生成するアルゴリズムです。

以下のような感じのやつを出力します。

id:kh9D1A2c


コメント投稿者の「IPアドレス」と「書き込み時刻」を連結した文字列をsha1-hmacでハッシュ化します。
同じ日付で同じIPアドレスから書き込みをすると、同じIDが生成されるという訳です。

コードは以下の通り。

  //初期パラメータ
  $ip = "192.168.1.1";
  $timestamp = "2017-10-06";
  $secret = "hogegefugagapiyoyo"; 

  //sha1を使ってハッシュ化
  $id_hash = hash_hmac("sha1", $timestamp.$ip, $secret);

  //base64の形式に変換
  $id_base64 = base64_encode($id_hash);

  //先頭の8文字だけ抜き取る
  $id =  substr($id_base64, 0, 8);

天文学的な確率でIDが被る可能性があると思いますが、まあそれはヨシとします・・。
ハッシュのsecretが他人にバレてしまうとIPアドレスを推測されてしまいそうなので、これは絶対漏らさないようにしたいところです・・。

以上!