JAVA实现短网址服务的原理是什么?
针对于有些用户担心短网址会不会重复的问题,现将缩链(https:suolink。cn)平台短网址服务的原理进行了详细介绍,以便用户对短网址有更深的理解,消除其担心。
Q:那么小的长度应该有一定概率会重复的吧?是不是一定时间后就不可用了?
A:短网址(ShortURL),顾名思义就是在形式上比较短的网址。通常用的是asp或者php转向,在Web2。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个,但是仍然存在重复几率,下面的算法一和三,就是这种的实现。
算法二
azAZ09这64位取6位组合,可产生500多亿个组合数量。把数字和字符组合做一定的映射,就可以产生唯一的字符串,如第62个组合就是aaaaa9,第63个组合就是aaaaba,再利用洗牌算法,把原字符串打乱后保存,那么对应位置的组合字符串就会是无序的组合。
把长网址存入数据库,取返回的id,找出对应的字符串,例如返回ID为1,那么对应上面的字符串组合就是bbb,同理ID为2时,字符串组合为bba,依次类推,直至到达64种组合后才会出现重复的可能,所以如果用上面的62个字符,任意取6个字符组合成字符串的话,你的数据存量达到500多亿后才会出现重复的可能。
具体参看这里彻底完善新浪微博接口和超短URL算法,算法四可以算作是此算法的一种实现,此算法一般不会重复,但是如果是统计的话,就有很大问题,特别是对域名相关的统计,就抓瞎了。
JAVA实现代码:publicclassShortUrlGenerator{paramargspublicstaticvoidmain(String〔〕args){StringsLongUrlQQ空间;长链接String〔〕aResultshortUrl(sLongUrl);打印出结果for(inti0;iaResult。length;i){System。out。println(〔ystem。out。println(〔i〕:::aResult〔i〕);}}publicstaticString〔〕shortUrl(Stringurl){可以自定义生成MD5加密字符传前的混合KEYStringkeymengdelong;要使用生成URL的字符String〔〕charsnewString〔〕{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加密StringsMD5EncryptResult(newEncrypt())。md5(keytringsMD5EncryptResult(newEncrypt())。md5(keyurl);StringhexsMD5EncryptResult;String〔〕resUrlnewString〔4〕;for(inti0;i4;i){把加密字符按照8位一组16进制与0x3FFFFFFF进行位与运算StringsTempSubStringhex。substring(itringsTempSubStringhex。substring(i8,i88);这里需要使用long型来转换,因为Inteper。parseInt()只能处理31位,首位为符号位,如果不用long,则会越界longlHexLong0x3FFFFFFFLong。parseLong(sTempSubString,16);StringoutChars;for(intj0;j6;j){把得到的值与0x0000003D进行位与运算,取得字符数组chars索引longindex0x0000003DlHexLong;把取得的字符相加outCharschars〔(int)index〕;每次循环按位右移5位lHexLonglHexLong5;}把字符串存入对应索引的输出数组resUrl〔i〕outChars;}returnresUrl;}}
再度输掉国运?为什么日本科技领域频现战略失误?近两年来,新能源汽车在全球市场上炒得火热,不管是消费者还是汽车售卖商,或者其他的投资人看到了新能源的前景,纷纷想在这个领域分一杯羹。这不仅是高新科技产业,更是与环保、碳中……
中国移动5G手机质量报告三星GalaxyS21Ultra5G今日,中国移动发布了《中国移动2021智能硬件质量报告(第一期)》及《中国移动5G通信指数报告(第四期)》。在此次的报告中,中国移动选取了国内外11个热门品牌中的43款5G手机……
石墨烯传来好消息,中国芯能弯道超车吗?不吹不黑,现实或更残酷下一代半导体材料被确定了一直以来国内网友都很期待我们能够在半导体方面实现弯道超车,不管是光刻机还是芯片,但就像梁孟松前段时间所说的那样,集成电路没有弯道超车和跨越式的发展……
MyBatisPlus快速入门源码笔记共享,拿走吧你前言为什么要学习它呢?答:MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它都可以自动化完成!优点:1。易于上手和掌握。2。sq……
知名企业家丧命,蔚来甩锅?文金卫蔚来又一次上了热搜,但这一次事故有些惨重。一位企业家在驾驶蔚来ES8时启动自动驾驶,结果高速车祸殒命。8月14日晚间,企业家殒命的消息随着一封讣告在网上……
电脑广告多怎么设置拦截?每个人都经常在使用计算机的过程中获得大量的垃圾广告,许多用户都非常厌倦,而目前的广告是非常困难的,许多广告无法关闭,我不知道如何解决它。以下小编为您带来了一个集中式广告拦截方法……
一加BudsPro真无线耳机体验不出手则已,一出手惊人最近有兄弟问我OnePlusBudsPro到底怎样?我觉得不出手则已,一出手惊人最为贴切,出道即巅峰。为何这样说?首先,外观设计就让人眼前一亮,满满的高级感。细腻磨砂的腔……
不知道啥是Web3?来,看过这篇就懂了Web1。0,指的是1994年到2004年,那是互联网发展早期。当时互联网提供的内容,我们只能阅读。还记得每天登录门户网站,看资讯的年代吗?Web2。0,指的是2005年……
让消费者购物更轻松近年来,随着居民生活水平不断提高,大众消费理念和需求逐渐变化,消费者更加注重消费体验和共鸣感,对零售企业提出了更高要求。国美把握趋势,打造全零售生态共享平台,并以真快乐手机应用……
区块链技术何以成为中国数字化转型最新驱动力?靳楚平国发智库研究院研究员一提到区块链技术,人们最先想到的一定是比特币等加密货币。但其实,区块链的应用领域绝不仅仅局限于加密货币。近年来,区块链等新一代数字技术正在成为中……
推荐3款轻薄5G手机手感体验一流,看看有你喜欢的吗朋友们,大家好!欢迎您点开笑呵呵的小丑的文章,您的每一次浏览都是对小编最大的鼓励!事不宜迟,咱们进入本篇的正题。现在有些手机,在追求性价比的道路上,不可避免地会牺牲掉手机……
亚马逊新手上路的小问题二一。我可以以个人身份注册账号吗?在以前是可以的,个人卖家和企业卖家都可以进行账号的申请。因为我们的账号都是老账号,很长时间没有申请过新账号,所以对于目前的申请政策不是太了……