Id丸見えっていろいろヤバイですよね。
とくに連番だと、連番のインクリメンツだと、つい出来心で連番を踏んでみたくなりますよね。
あと、マナー悪いクローラーがババっと来そう。
IDを隠す
IDを隠すにはmd5 や crc / sha で hexdigest すりゃイイんだけど、文字数が多すぎて見栄えが悪い。
URL 短縮系のサイトでやってる bitlyや google shorten と同じようなことが出来ないか考えてみたけど。
ちょっとアルゴリズムが思いつかなかったので、ライブラリを探してみました。
HashID で 数字のIDを隠す
数字を「配列」にすると、アルファベットでエンコードしてくれます。
各種言語で書かれているのでいいですね。
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桁ですかね。