短网址算法

    //62进制
    public static int BASE_NUM = 62;

    //62进制字母顺序
    public static final char[] array = {‘G‘, ‘q‘, ‘w‘, ‘0‘, ‘H‘, ‘e‘, ‘T‘, ‘F‘, ‘9‘, ‘r‘, ‘V‘, ‘t‘, ‘y‘, ‘u‘, ‘N‘, ‘i‘, ‘6‘, ‘D‘, ‘o‘, ‘p‘, ‘L‘, ‘a‘, ‘s‘, ‘d‘, ‘K‘, ‘f‘, ‘g‘, ‘h‘, ‘j‘, ‘k‘, ‘4‘, ‘l‘, ‘z‘, ‘x‘, ‘c‘, ‘v‘, ‘b‘, ‘S‘, ‘n‘, ‘m‘, ‘1‘, ‘Z‘, ‘3‘, ‘5‘, ‘Q‘, ‘W‘, ‘E‘, ‘R‘, ‘7‘, ‘Y‘, ‘U‘, ‘I‘, ‘O‘, ‘2‘, ‘P‘, ‘A‘, ‘J‘, ‘X‘, ‘C‘, ‘B‘, ‘8‘, ‘M‘};

    /**
     * 将10进制数转为62进制字符串(短网址)
     *
     * @param number
     * @return
     */
    public static String getShortUrlByLongNum(Long number) {
        Long rest = number;
        Stack<Character> stack = new Stack<Character>();
        StringBuilder result = new StringBuilder(0);
        if (0 == rest) {
            return String.valueOf(array[0]);
        }
        while (rest != 0) {
            stack.add(array[new Long((rest - (rest / BASE_NUM) * BASE_NUM)).intValue()]);
            rest = rest / BASE_NUM;
        }
        for (; !stack.isEmpty(); ) {
            result.append(stack.pop());
        }
        return result.toString();
    }

    /**
     * 通过短网址返回10进制数
     *
     * @param shortUrl
     * @return
     */
    public static Long getLongNumByShortUrl(String shortUrl) {
        long multiple = 1;
        long result = 0;
        Character c;
        for (int i = 0; i < shortUrl.length(); i++) {
            c = shortUrl.charAt(shortUrl.length() - i - 1);
            result += valueOfCharacter(c) * multiple;
            multiple = multiple * BASE_NUM;
        }
        return result;
    }

    /**
     * 字母对应的值 如array数组 G对应0 q对应1
     *
     * @param c
     * @return
     */
    private static int valueOfCharacter(Character c) {
        for (int i = 0; i < array.length; i++) {
            if (c == array[i]) {
                return i;
            }
        }
        return -1;
    }

准备一个被打乱的数组,存放A-Za-Z0-9这62个字符 ,预先产生一个网址ID,将这个ID通过 _10_to_62 解析转换成62进制的短网址符。

存储ID,短网址code,页面URL  算法如下,很简单,时间效率也比较高,甚至,有了存储的ID,要不要存储短网址code都无所谓,

这个算法时间复杂度本来就是n,而一般的短网址长度也就1~7位,时间复杂度也可以算作O(1)常量了。

原文地址:https://www.cnblogs.com/tinya/p/9167399.html

时间: 2024-07-30 03:25:21

短网址算法的相关文章

php短网址算法实例代码分享

php实现的短网址算法,理论上支持1,073,741,824个短网址. 每个网址用6个字符代替,(6^32) 最多可以拥有1,073,741,824个短网址.当然,你还可以记录更详细的信息,如访问记录,创建时间等.如果真不够用了,还可以删掉很久不用的. function shorturl($input) { $base32 = array ( 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p

php生成短网址的思路与方法(推荐)

生成短网址的思路以及使用php生成短网址的实现方法. 生成短网址的思路:如果把短网址还原了,你知道是个什么样子的吗?比如:http://www.jbxue.com/sitejs-17300-1.html对于以上这个链接,除了直接打开之外,还有一种方法打开它,如下:http://www. jbxue.com/link.php?url=http://www.jbxue.com/sitejs-17300-1.html好了,短网址还原了实际就是这个样子的了,可能你看到新浪微博应用里面的短网址都是这个样子

微博URL短网址生成算法原理及(java版、php版实现实例)

短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接. 例如:http://t.cn/SzjPjA 短网址服务,可能很多朋友都已经不再陌生,现在大部分微博.手机邮件提醒等地方已经有很多应用模式了,并占据了一定的市场.估计很多朋友现在也正在使用. 看过新浪的短连接服务,发现后面主要有6个字符串组成,于是第一个

微博短网址生成算法原理

短网址(Short URL),顾名思义就是在形式上比较短的网址.通常用的是asp或者php转向,在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接. 例如:http://980.so/3u0JzX 表示http://www.ganmall.com.cn/h/detail/dp_928.html?chl=dwz9801 短网址服务,可能很多朋友都已经不再陌生,现在大部分微博.手机邮件提醒等地方已经有很

用PHP实现URL转换短网址的算法示例

短网址就是把一个长的地址转换在超级短的网址,然后访问短网址即可跳转到长网址了,下面来看用PHP实现URL转换短网址的算法与例子. 短网址(Short URL) ,顾名思义就是在形式上比较短的网址.在Web 2.0的今天,不得不说,这是一个潮流.目前已经有许多类似服务,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接. 算法原理 1)将长网址md5生成32位签名串,分为4段, 每段8个字节;2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(

php短网址生成算法

<?php //短网址生成算法 class ShortUrl { //字符表 public static $charset = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; public static function encode($url) { $key = 'abc'; //加盐 $urlhash = md5($key . $url); $len = strlen($urlhash); /

数据结构与算法简记--实现一个短网址系统

实现一个短网址系统 短网址服务 把一个长的网址转化成一个短的网址,访问这个短网址,就相当于访问原始的网址 原始网址:https://github.com/wangzheng0822/ratelimiter4j 短网址:http://t.cn/EtR9QEG 上面第二个网址是通过新浪提供的短网址服务生成的 核心功能: 把原始的长网址转化成短网址 当用户点击短网址的时候,短网址服务会将浏览器重定向为原始网址 如何通过哈希算法生成短网址? 使用比较著名并且应用广泛的一个哈希算法:MurmurHash

URL短网址系统的算法设计及实践

在通常情况下,URL是由系统生成的,通常包括URI路径,多个查询参数,可以对参数进行加密和解密.当人们要分享某个URL,比如短信,邮件,社交媒体,这就需要短URL. 而短网址,顾名思义就是在长度上比较短的网址.简单来说就是帮您把冗长的URL地址缩短成8个字符以内的短网址. 你有没有遇到过短信字符过长本来一条信息搞定的事情需要发两条?你有没有遇到过填报系统里填写网址却因为字符限制无法完整提交?你有没有遇到过排版好的内容由于链接过长而完全打乱了美感? 这时候,你就需要用到短网址生成工具了. 如开发者

长网址转换短网址

可以用955网址转换网站 以下是原理:http://blog.sina.com.cn/s/blog_65db99840100lg4n.html(转) ----------------“今天看到新闻说谷歌的网址缩短服务(http://goo.gl/)向公众开放了,就想看看这短地址是怎么一回事,因为玩新浪微博的时候也经常碰到这个东西. 用我的博客地址http://blog.sina.com.cn/bluemonster0808生成的短地址是goo.gl/HdAU(值得注意的是同一个长地址每次生成的短