2

私はこの主題に関する約5-10の異なる投稿を読みましたが、明確な例はありません。彼らは裏話を説明します。

  1. 番号「1」から「500000」までのレコードを持つMySQLデータベースがあります
  2. これらのレコードID番号に基づいてURLを作成したい
  3. URLを3〜5の数字の間で一定に保ちたい

例:

http://wwwurl.com/1はhttp://wwwurl.com/ASd234sになり、http: //wwwurl.com/5000000 はhttp://wwwurl.com/Y2v0R4rになります。

おかげで、これを機能させるための関数コードの明確な例を入手できますか?

4

2 に答える 2

0

非常にばかげた例-たとえばsubstr(md5($id), 10, 15)、を使用します。ここで、$idは1-500000レコードID番号です。32文字のハッシュコード内で位置10と15の間で同じハッシュを生成する確率(ただし、位置24〜28などを使用することもできます)はゼロに制限されています...

また、マッピングID <-> HASHをDBテーブルに保存して、URLに基​​づいて関連するレコードを簡単に見つけることもできます。

ソースコード全体-ハッシュの作成、URLの書き換え、マッピングの保存、URLに基​​づくレコードの取得は非常に複雑な問題であり、何千ものバリエーションで実装でき、主にプログラマーのスキル、経験、およびこれを実装するシステムに依存します。 ..

于 2012-04-24T10:03:27.937 に答える
0

ID番号をより短い文字列に減らすには、基数35に変換します。

 $short_id=base_convert($id, 10, 35);

シーケンスが何であるかを予測するのをより困難にしたい場合は、それをパディングして、既知の文字列でxorします。

 function shortcode($id)
 {
   $short_id=str_pad($short_id, 4, '0', STR_PAD_LEFT);
   $final='';
   $key='a59t'; // 500000 = 'bn5p'
   for ($x=0; $x<strlen($short_id); $x++) {
     $final=chr('0') | (ord(substr($short_id, $x, 1)) ^ ord(substr($key, $x, 1));
   }
   return $final;
 }

また、元のIDを元に戻すには、プロセスを逆にします。

于 2012-04-24T12:08:12.463 に答える