« Faviconの自動生成 Main Firefox: AutoPagerizeがおかしい »

短縮ハッシュ値の生成

データベース(SQLite)への値の特定用idとして「id integer primary key」とはしているが、これだと最終項目を削除した際に新規追加でその値を取るものが出てきて都合が悪い(削除せずにフラグでオフにしてもいいかもしれないが、それはそれで…)。

→「integer primary key」の削除時の重複除外は「autoincrement」を付ければよかったらしい。

このため別の文字列idとして、phpだとuniqid()関数(とrand()やmd5()と組み合わせたり)を使ったりしている:

(って、見てたらmd5()はコリジョン発生があるから止めとけ(sha1()を使え)とのお達しが。)

これで生成されるid長が、次のようになっていて:

種類

id長

生成例
uniqid()

13

52afc0e354a11
uniqid(rand())

約23

1cdab095a2b6a1977987159af6432ea0
※id長はrand()値の範囲による
md5(uniqid(rand()))

32

1cdab095a2b6a1977987159af6432ea0

uniqid()がシステムのマイクロ秒を使っていて重複の可能性があるため、rand()を使った形にしたいが、これをURLのquery文字列に渡すとするとちょっと長ったらしい。

このため、URLにおけるbit.lyやgoo.glのような短縮ハッシュが利用できないかと探してみた。

Qiitaのkoriymさんのものがよさそうな感じ。7文字程度で済みそうです。もうちょっと長くてもいいですが。

使用時には、md5()も衝突するっていうし、短縮ハッシュだとなおさら追加時の衝突チェックは不可避ですかね。

Leave a comment

Your comment