単純に、
http://hoge.example.com == xialm
http://huga.example.org == jklls
みたいにランダム生成した文字列と関連付けるデータベースがあるのだと思いますよ。
実際には有効期限や最終アクセスなどもデータベース化しているかも。
# url は当然ながらダミーです。
失礼しました。そういう次元ではないですね。
双方向関数を使っているのだと思います。
hoge から xxxxx に、 xxxxx から hoge に双方向に変換できる関数です。
# 恥の雪ぎ程度なので詳しくありません……
# むしろ恥の上塗り。
ビデオの録画予約をするための「Gコード」のアルゴリズムが近いと思います。
http://members.at.infoseek.co.jp/gcode/
出現する要素が限られているのをうまく利用した方法ですね。
回答ありがとうございます。Gコードって複雑な仕組みをとっているんですね。確かにURL圧縮で使われているアルゴリズムと似ている部分もある気がします。
単純な方法
5桁の文字に変換するとする場合、
a-z,A-Z,0-9をが使えるとすると
26+26+10=62種類の文字が使える。
合計 62^5= = 916132832(16進数 369B13E0 ) < 2^31
整数にすると 4byteの整数で表現可能な範囲
1. データベースにURLを連番で登録を行う。
データは登録した順に1~62^5-1の順の間
の数字を連番で付与したUniqueキー
2. 1.の連番を62進数の5桁に変換
でアクセスすると
abcdefを10進数よりUniqueキーにより
検索して、URLにリダイレクトする。
実際には連番ではなく、キーとして5文字の
文字を保存したり、連続割り当てせずに
乱数でに数値を発生させて、未使用の場所を
任意に割り当てを行ったり、事前に乱数で
登録される上限個数を決めておき、事前に
乱数で発生させて重複しないものを順番に
割り当てを行ったり等多様な方法での文字
への変換方法を考えることが出来る。
ハッシュ+文字エンコードのような感じではないでしょうか。
ハッシュとは、簡単に言って不定長のデータ(例えばURLなどの文字列)を、固定長(例えば数バイト)の「要約データ」に圧縮する技術です。数バイトに要約する以上、全く別の2つのデータ(URL)が同じハッシュを共有してしまう可能性がありますが、ハッシュアルゴリズムには数学的な観点からそのような衝突の可能性が極めて小さいアルゴリズムが選択されているため、そのようなことは滅多に起きないとされています。
ハッシュで検索すれば詳しい技術情報がすぐ出てきます。
例えばこの辺ですね。
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%83%E3%82%B7%E3%...
ただハッシュ化しただけでは人間が認識できないバイナリデータになりますので、それをさらにBASE64などの文字化ルーチンに通しているのだと思います。BASE64はバイナリデータをアルファベットの大文字(26文字)、アルファベットの小文字(26文字)、数字(0~9までの10文字)、記号(「+」と「/」の2文字)の64文字に変換するもので、インターネット関連のプロトコルではよく使われています。(例えばメールの添付ファイルなどはBASE64でエンコードされていることが多いです)
説明不足で申し訳ございません。おっしゃるよなことをしているのはわかるのですが、具体的な関数の仕組みが知りたいです。