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