zoukankan      html  css  js  c++  java
  • 短链接实现

    短连接能够在限制发布内容的平台上节省url内容的长度而有用武之地,在排除域名的短之外,一个快速可靠的短连接生成算法就是短连接服务的核心。

    原理

    给每一个请求短地址的长地址分配一个数字ID,该ID每次请求自增。这个自增可以很容易实现,数据库的自增ID或者是序列即可满足要求。由于数字ID是10进制的,表现成文本会比较冗长,所以可以将十进制数字转成62(26大写+26小写+10数字)进制文本。

    举例算法

        /// <summary>
        /// 数字ID与字符串相互转换算法
        /// </summary>
        public class DigitMapAlgo
        {
            public DigitMapAlgo(char[] keyMap)
            {
                KeyMap = keyMap;
                KeyIndex = new Dictionary<char, int>();
                for (var i = 0; i < keyMap.Length; i++)
                {
                    KeyIndex[keyMap[i]] = i;
                }
            }
    
            protected char[] KeyMap { get; set; }
            protected Dictionary<char, int> KeyIndex { get; set; }
    
            public string Trans(long id)
            {
                StringBuilder sb = new StringBuilder();
                var newId = ReverseLong(id);
                while (newId > 0)
                {
                    sb.Append(KeyMap[newId % KeyMap.Length]);
                    newId = newId / KeyMap.Length;
                }
                return sb.ToString();
            }
    
            public long Resume(string key)
            {
                long id = 0;
                for (var i = 0; i < key.Length; i++)
                {
                    id += KeyIndex[key[i]] * Pow(KeyMap.Length, i);
                }
                id = ReverseLong(id);
    
                return id;
            }
    
            private long ReverseLong(long v)
            {
                var cs = new List<char>();
                cs.Add(v.ToString()[0]);
                cs.AddRange(v.ToString().Skip(1).Reverse());
                return long.Parse(string.Join("", cs));
            }
    
            private long Pow(long a, int n)
            {
                long s = 1;
                while (n-- > 0)
                {
                    s *= a;
                }
                return s;
            }
        }
  • 相关阅读:
    Linux 7 web服务基础知识
    Linux 6 Nginx
    Linux 5 MySQL、redis相关
    Linux 4 安装相关程序
    phpcms 路由配置
    ecmall 入口文件解析 引入了什么
    php 调用天气接口
    phpcms 加载微信类库,生成签名
    ecmall 学习记录2
    Jquery 遍历
  • 原文地址:https://www.cnblogs.com/binking338/p/5363245.html
Copyright © 2011-2022 走看看