2

ユニークな24文字の文字列から8文字の文字列を取得して短縮URLを作成したいと考えています。8 文字の文字列は、一意の 24 文字の文字列に基づいている必要があります。ランダムな 8 文字の文字列を作成すると、それがまだ使用されていないことを確認するためにデータベースを検索する必要があります。また、24 文字の文字列の最初の 8 文字または最後の 8 文字を使用したくありません。24 文字は MongoDB オブジェクト ID です。ありがとう。

4

3 に答える 3

3

8人は少なすぎる。

24 から 16 を求める方法は次のとおりです。

$id = '507f191e810c19729de860ea';

$str = base64_encode(implode('', array_map(function($c) { return chr(hexdec($c)); }, str_split($id, 2))));

var_dump($str); // UH8ZHoEMGXKd6GDq

文字数が少ない場合は、文字ベースを大きくする必要がありますが、問題は、URL セーフが残っていないことです。

于 2013-02-28T22:26:47.350 に答える
1

24文字の文字列が上+下の英数字であると仮定すると、次のようになります。

26+26+10 chars = 62 chars = 6 bits required to present them, and
24 * 6 = 144 bits to store them.

144ビット/8ビット/バイト=18バイト。衝突の可能性がなければ、24文字を8文字に圧縮することはできません。8ビット/文字で8文字=最大64ビット。

于 2013-02-28T22:34:33.300 に答える
0

24文字の文字列に何らかのパターンがあり、そのパターンから8文字の一意の文字列を作成できることが確実でない限り、これを行う方法はないと思います。md5 を使用して 32 文字の一意の文字列を作成し、たとえば中央の 8 文字を取得できますが、衝突の可能性を減らすだけであり、それが一意であるという保証はありません

于 2013-02-28T22:24:25.787 に答える