全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
小型封罐机小型封罐机 短 URL 如何才能更短 只有域名短 才能保证短 Url 更短 我们公司有一个社区 也想添加短 Url 的功能 但是社区域名不给力 啊 长长的域名 导致了短 Url 不是那么理想 像腾讯微博 新浪微博的短 Url 域名就非常给力 新浪的 短 Url 域名 在 9 年前注册 腾讯的短 Url 域名 也是在 9 年前注册 你可以想象一下 这 些大公司把目光放的多么的高远 现在域名抢注更是如此 凡是你能想到的域名 都有人注册了 注册域 名也不失是一种投资 弄好了换一套房产也是可以的 这就需要你的智慧与运气喽 好了话题有点偏了 言归正传 短 URL 算法 算法一 将长网址 md5 生成 32 位签名串 分为 4 段 每段 8 个字节 对这四段循环处理 取 8 个字节 将他看成 16 进制串与 0 x3fffffff 30 位 1 与操作 即超过 30 位的忽略处 理 这 30 位分成 6 段 每 5 位的数字作为字母表的索引取得特定字符 依次进行获得 6 位字符串 总的 md5 串可以获得 4 个 6 位串 取里面的任意一个就可作为这个长 url 的短 url 地址 这种算法 虽然会生成 4 个 但是仍然存在重复几率 算法二 a zA Z0 9 这 64 位取 6 位组合 可产生 500 多亿个组合数量 把数字和字符组合做一定的映射 就可以产生 唯一的字符串 如第 62 个组合就是 aaaaa9 第 63 个组合就是 aaaaba 再利用洗牌算法 把原字符串打乱 后保存 那么对应位置的组合字符串就会是无序的组合 把长网址存入数据库 取返回的 id 找出对应的字 符串 例如返回 ID 为 1 那么对应上面的字符串组合就是 bbb 同理 ID 为 2 时 字符串组合为 bba 依次类 推 直至到达 64 种组合后才会出现重复的可能 所以如果用上面的 62 个字符 任意取 6 个字符组合成字 符串的话 你的数据存量达到 500 多亿后才会出现重复的可能 短 Url 算法实现 一 function shorturl input base32 array a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 hex md5 input 小型封罐机小型封罐机 hexLen strlen hex subHexLen hexLen 8 output array for i 0 i subHexLen i subHex substr hex i 8 8 int 0 x3FFFFFFF out for j 0 j 5 output out key array rand output 1 return output key 短 Url 随机数算法 function random length pool random if empty pool pool abcdefghkmnpqrstuvwxyz pool 23456789 srand double microtime 1000000 for i 0 i length i random substr pool rand strlen pool 1 return random 短 Url 存储与使用 短 Url 表结构 id 自增 ID 主键 url 目标 Url short url 短网址后缀 小型封罐机小型封罐机 短 Url 使用流程 1 Url 入库获得主键 ID 如 123456 2 用 dec2Any 将编号转换为 62 进制 并拼接网址 如 3 用户访问 时 提取短 Url 后缀 w7e 4 用 any2Dec 将短网址后缀转换为 10 进制 得到链接编号 即主键 ID 如 123456 5 用主键 ID 查询目标 Url 然后做跳转 下面列出进制转化函数 return string 十进制 number 以 radix 进制的表示 param dec 需要转换的数字 param toRadix 输出进制 当不在转换范围内时 此参数会被设定为 2 以便及时发现 return 指定输出进制的数字 function dec2Any dec toRadix MIN RADIX 2 MAX RADIX 62 num62 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ if toRadix MAX RADIX toRadix 2 if toRadix 10 return dec Long MIN VALUE 转换为 2 进制时长度为 65 buf array charPos 64 isNegative dec 0 bccomp dec 0 0 if isNegative dec dec bcsub 0 dec while bccomp dec toRadix 0 buf charPos num62 bcmod dec toRadix dec bcdiv dec toRadix buf charPos num62 dec if isNegative buf charPos any for i charPos i 65 i any buf i return any fromBase 只能在 2 和 62 之间 包括 2 和 62 param number 输入数字 param fromRadix 输入进制 return 十进制数字 function any2Dec number fromRadix num62 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ dec 0 digitValue 0 len strlen number 1 for t 0 t long url key apiKey jsonData json encode postData curlObj curl init curl setopt curlObj CURLOPT URL curl setopt curlObj CURLOPT RETURNTRANSFER 1 curl setopt curlObj CURLOPT SSL VERIFYPEER 0 curl setopt curlObj CURLOPT HEADER 0 curl setopt curlObj CURLOPT HTTPHEADER array Content type application json curl setopt curlObj CURLOPT POST 1 curl setopt curlObj CURLOPT POSTFIELDS jsonData response curl exec curlObj curl close curlObj json json decode response return json id 短 Url 还原 function expandGoogleUrl short url curlObj curl init curl setopt curlObj CURLOPT URL curl setopt curlObj CURLOPT HEADER 0 curl setopt curlObj CURLOPT RETURNTRANSFER 1 curl se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品营销策划方案及品牌推广实战案例
- Java编程进阶与分布式系统开发指南
- 建筑工程施工现场应急预案方案和措施
- 产品经理工作计划与团队协作方案
- 人力资源总监员工关系管理方案
- 企业管理培训如何应对各种面试场景
- 2025仓库管理员出入库考核试题及答案
- ESG项目专员项目法务管理方案
- 兰溪行业报告市场现状与发展趋势
- IT基础设施运维工程师云计算平台操作手册
- (完整版)陆河客家请神书
- 提高发票额度的合同6篇
- 压力容器管理和使用制度模版(2篇)
- 销售预包装食品经营者备案信息采集表
- 体检报告电子版
- 南京工业大学《无机与分析化学》2023-2024学年第一学期期末试卷
- POCIB国际贸易FOB进出口预算运算表
- 酸碱灼伤的应急处理
- 数学-江苏省常州市2024-2025学年高三第一(上)学期期中质量调研考试试题和答案
- 专题20 化学实验综合题-物质制备类-五年(2020-2024)高考化学真题分类汇编(原卷版)
- 医院精神科护理风险评估制度
评论
0/150
提交评论