サイトの URL 短縮機能を構築しています。
現時点でわかっていること:
- URL ( http://www.google.com ) を取得して sha1 すると、40 文字のハッシュ (738ddf35b3a85a7a6ba7b232bd3d5f1e4d284ad1) になります。
- sha1 ハッシュを取得し、それを base62 (基本的に AZ、az、0-9) にエンコードし、元の sha1 にデコードできる 28 文字のハッシュ (jNMYchEoche67ro1k5gsCcHfDzmR) になります。
sha1 を使用する理由は、ユーザーが現在または過去の URL から次の URL を推測できないようにするためです。
base62 を使用する理由は、URL を有効にしてユーザーが読み取れるようにするためです。
ドメインに追加される 28 文字の「短い URL」 ( http://www.google.com/r/jNMYchEoche67ro1k5gsCcHfDzmRis ) は、特に Twitter の文字制限を考慮すると、少し長すぎます。
現在検討しているのは、sha1 を約 20 文字削減することです。これにより、14 文字の短縮 URL が生成されますが、さらに削減すると、衝突が早すぎるのではないかと懸念されます。
大きな数値 (または文字列) を小さな値に圧縮することも考えましたが、それには 28 文字または 14 文字のハッシュを 2 つに分割して並べ替える必要があり、そこから元のハッシュに戻す方法がわかりません。
私たちに何ができるか考えている人はいますか?URL を構築するためにデータベースに依存しないソリューションを希望しますが、DB が必要な場合は、Redis / MongoDB に限定されていることに注意してください (つまり、自動インクリメント整数フィールドはありません)。