JAVA实现短网址服务的原理是什么?
针对于有些用户担心短网址会不会重复的问题,现将缩链(https://suolink.cn)平台短网址服务的原理进行了详细介绍,以便用户对短网址有更深的理解,消除其担心。
Q:那么小的长度应该有一定概率会重复的吧?是不是一定时间后就不可用了?
A:短网址(Short URL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流。目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。
短网址服务,可能很多朋友都已经不再陌生,现在大部分微博、手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场。估计很多朋友现在也正在使用。
看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个想到的就是原来公司写的一个游戏激活码规则,也就是下面的算法2,
26个大写字母 26小写字母,10个数字,随机生成6个然后插入数据库对应一个id,短连接跳转的时候,根据字符串查询到对应id,即可实现相应的跳转!不过2的62次方,不知道有没有重复的,小概率可以,但是对应不是很大的网站应该足够了
自从twitter推出短网址(shorturl),继之国内各大微博跟风,google公开goo.gl使用API,短网址之风愈演愈烈.不得不说这是一个新兴又一大热门web2.0服务.现整理一下,包括完整短网址网站,短网址生成原理,算法举例,以及优劣比较。
短链接的好处:
1、内容需要;2、用户友好;3、便于管理。
为什么要这样做的,原因我想有这样几点:
微博限制字数为140字一条,那么如果我们需要发一些连接上去,但是这个连接非常的长,以至于将近要占用我们内容的一半篇幅,这肯定是不能被允许的,所以短网址应运而生了。
短网址可以在我们项目里可以很好的对开放级URL进行管理。有一部分网址可以会涵盖暴力,广告等信息,这样我们可以通过用户的举报,完全管理这个连接将不出现在我们的应用中,应为同样的URL通过加密算法之后,得到的地址是一样的。
我们可以对一系列的网址进行流量,点击等统计,挖掘出大多数用户的关注点,这样有利于我们对项目的后续工作更好的作出决策。
算法原理
算法一
1)将长网址md5生成32位签名串,分为4段, 每段8个字节;
2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理;
3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串;
4)总的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算法,算法四可以算作是此算法的一种实现,此算法一般不会重复,但是如果是统计的话,就有很大问题,特别是对域名相关的统计,就抓瞎了。
JAVA 实现代码: public class ShortUrlGenerator { /** @param args */ public static void main(String[] args) { String sLongUrl = "QQ空间"; //长链接 String[] aResult = shortUrl(sLongUrl); // 打印出结果 for (int i = 0; i < aResult.length; i++) { System.out.println("[" ystem.out.println("[" + i + "]:::" + aResult[i]); } } public static String[] shortUrl(String url) { // 可以自定义生成 MD5 加密字符传前的混合 KEY String key = "mengdelong"; // 要使用生成 URL 的字符 String[] chars = new String[]{"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", "6", "7", "8", "9", "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" }; // 对传入网址进行 MD5 加密 String sMD5EncryptResult = (new Encrypt()).md5(key tring sMD5EncryptResult = (new Encrypt()).md5(key + url); String hex = sMD5EncryptResult; String[] resUrl = new String[4]; for (int i = 0; i < 4; i++) { // 把加密字符按照 8 位一组 16 进制与 0x3FFFFFFF 进行位与运算 String sTempSubString = hex.substring(i tring sTempSubString = hex.substring(i * 8, i * 8 + 8); // 这里需要使用 long 型来转换,因为 Inteper .parseInt() 只能处理 31 位 , 首位为符号位 , 如果不用 long ,则会越界 long lHexLong = 0x3FFFFFFF & Long.parseLong(sTempSubString, 16); String outChars = ""; for (int j = 0; j < 6; j++) { // 把得到的值与 0x0000003D 进行位与运算,取得字符数组 chars 索引 long index = 0x0000003D & lHexLong; // 把取得的字符相加 outChars += chars[(int) index]; // 每次循环按位右移 5 位 lHexLong = lHexLong >> 5; } // 把字符串存入对应索引的输出数组 resUrl[i] = outChars; } return resUrl; } }
短视频平台都有哪些?2016年短视频行业全面爆发,当美拍秒拍快手等一系列短视频APP大火之后,短视频被认为是下一个新媒体传播工具的巨大风口。今日头条先是上线抖音短视频,定位为15秒音乐短视频社区,强调
汤加火山喷发不足以导致气候变化来源科技日报汤加火山喷发不足以导致气候变化卫星监测显示,汤加火山喷发将大量火山灰喷射到超过海平面30千米的高空,向大气平流层注入了约40万吨的二氧化硫。那么,这场21世纪最大的火山
科研团队开发出高精度硅基半导体量子点日本理化学研究所的国际研究小组利用硅基半导体制作的量子点成功实现量子计算机所需的操作精度,克服了量子计算机实用化开发的一大技术难题。该成果发表在自然上。量子计算机容易发生计算错误,
自动续费套路多智能手机时代,很多手机应用都有付费会员功能,本来付费就是为了享受更多更好的服务,可不少人开通付费会员功能后,却遇到了自动续费的各种套路。自动续费的字样,有时候字体很小,很难看清,取
CentOS7下FreeSwitch1。8源码安装过程完整记录1yum安装相关的依赖包yuminstallygitgcccwgetalsalibdevelautoconfautomakebisonbroadvoicedevelbzip2cur
申通超低价激励,顺丰20亿回购股份,快递巨头股权激励一申通超低价激励对快递企业而言,去年伴随着行业进行了一场较为惨烈的洗牌。在激烈的竞争中,申通快递今年率先推出了快递公司的首份股权激励计划。2月15日,申通快递发布公告,本次股权计划
SpaceX星链在15国平均下载速度超过100Mbps财经网科技3月17日讯,据网易科技消息,全球宽带网络速度测试网站Speedest。net运营商Ookla发布最新数据显示,尽管SpaceX旗下星链卫星互联网服务刚刚完成测试阶段,但
远控节点上,切换用户执行命令ansibleplaybook登录远控节点是一个账号,切换到root账号执命令。需要在hosts文件里配置用户密码namechangeuserremoteuserubuntugatherfactsnobecom
央视315晚会起底直播乱象直播平台佣金高达50随着2022年央视315晚会的落幕,又一批在消费领域违法侵权的现象被曝光。今年晚会以公平守正安心消费为主题,第一个节目直指直播领域乱象,除了经营管理的乱象外,直播平台高达50的佣金
原材料上涨推高成本比亚迪等新能源车企掀起涨价潮本报记者矫月见习记者李昱丞新能源汽车的成本压力正向需求端传导。3月15日夜间,比亚迪在官方微博发布通知,自3月16日零时起对王朝网和海洋网相关新能源车型的官方指导价进行调整,上调幅
二线集团撞期正面交锋,荣耀Redmi同时祭出杀招,华为再躺枪还有几十分钟,这个月备受关注的两场新品发布会就要开始,荣耀Magic4系列和RedmiK50系列将加入新机市场的争夺。这两个品牌从创立之初就不可避免地受到了一线母品牌的影响,Red