それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

URLに含まれる数字のIDを隠したい時にhashid を使うと楽

Id丸見えっていろいろヤバイですよね。

とくに連番だと、連番のインクリメンツだと、つい出来心で連番を踏んでみたくなりますよね。

あと、マナー悪いクローラーがババっと来そう。

IDを隠す

IDを隠すにはmd5crc / sha で hexdigest すりゃイイんだけど、文字数が多すぎて見栄えが悪い。

URL 短縮系のサイトでやってる bitlyや google shorten と同じようなことが出来ないか考えてみたけど。

ちょっとアルゴリズムが思いつかなかったので、ライブラリを探してみました。

HashID で 数字のIDを隠す

hashids.org

数字を「配列」にすると、アルファベットでエンコードしてくれます。

各種言語で書かれているのでいいですね。

BASE64 だと辛いし BASE58 くらいでいいんですけどね。

BaseXX で文字を符号化する感じですね。Saltが使えるので便利です。

サンプル

hashids = Hashids.new "this is my salt"
id = 123
id = id.to_s
id = id.split //
id = id.map{|e| e.to_i }
id = hashids.encode(*id) ## ここで連番の数字を配列にしたものを渡す。
numbers = hashids.decode(id)

楽しいですね。

アルファベットだけでIDドコまで行けるか

6桁もアレば十分ですね

(26*2)6 =19,770,609,664

余裕見ても8桁ですかね。