PHP生成短连接
Array ( [0] => http://t.cn/KyfLyH [1] => http://t.cn/bPafHS [2] => http://t.cn/H880aD [3] => http://t.cn/TmvDK0 )
生成的短url存到服務器里,做一個映射,short_url => original_url,輸入短url的時候按照映射轉回長url,然后訪問原始url即可
PS:另外有一種想法,就是把url按照順序存貯,第一條為aaaaaa,第二條為aaaaab..以此類推,不需要hash,這樣不就不會重復了嗎。
?
算法一
1)將長網址md5生成32位簽名串,分為4段, 每段8個字節;
2)對這四段循環處理, 取8個字節, 將他看成16進制串與0x3fffffff(30位1)與操作, 即超過30位的忽略處理;
3)這30位分成6段, 每5位的數字作為字母表的索引取得特定字符, 依次進行獲得6位字符串;
4)總的md5串可以獲得4個6位串; 取里面的任意一個就可作為這個長url的短url地址;
算法二
a-zA-Z0-9 這64位取6位組合,可產生500多億個組合數量.把數字和字符組合做一定的映射,就可以產生唯一的字符串,如第62個組合就是aaaaa9,第63個組 合就是aaaaba,再利用洗牌算法,把原字符串打亂后保存,那么對應位置的組合字符串就會是無序的組合。
把長網址存入數據庫,取返回的 id,找出對應的字符串,例如返回ID為1,那么對應上面的字符串組合就是bbb,同理 ID為2時,字符串組合為bba,依次類推,直至到達64種組合后才會出現重復的可能,所以如果用上面的62個字符,任意取6個字符組合成字符串的話,你 的數據存量達到500多億后才會出現重復的可能。
算法一:使用新版的md5和sha算法,不存在碰撞問題。算法二:“你的數據存量達到500多億后才會出現重復的可能”。
原理就是排列組合的應用。
轉載于:https://www.cnblogs.com/seanxyh/archive/2013/04/08/3008543.html
總結
- 上一篇: cocos2dx 自定义动画
- 下一篇: Extjs4 tab添加右键刷新功能