什么是缩短/转换字符串的最佳方法

时间:2011-04-18 09:28:39

标签: c# string c#-4.0

我有几个用户,我想为每个用户生成一个引荐网址,但我认为这样做不会很好

http://domain.com/myusername

我更愿意为自己购买一个缩短的域名,并将myusername转换为更小的,但不是使用数据库生成,因此它很容易管理,无需拥有特别表格。

有点像Dropbox,我的推荐是:http://db.tt/jnYosez

是否有一种简单的方法可以将字符串更改为短字符串,反之亦然...或者如果我强制使用数字,我可以随时使用用户ID ...也许转换为其他数字基础?< / p>

任何想法都受到赞赏:)

2 个答案:

答案 0 :(得分:0)

您可能希望查看bit.ly个链接,他们提供an API

答案 1 :(得分:0)

如果不使用数据库,则无法在室内进行。这是因为名称很短,因此之前可能已经使用了名称。

您需要生成一个名称(使用随机性或算法),检查它是否存在,然后将其存储在数据库中。

更新

这是一个解决方案:

    public class NumberConverter
    {
        public const string HEX = "0123456789abcdef";
        public const string Bigger = "0123456789abcdefghihjklmnopqrstuvqyz";
        private int _numericBase;
        private string _base;

        public NumberConverter(string numberBase)
        {
            _base = numberBase;
            _numericBase = numberBase.Length;
        }

        public string ToString(int number)
        {
            var remainder = number % _numericBase;
            var div = number / _numericBase;
            string tmp = "";
            while (div > 0)
            {
                tmp = _base[remainder] + tmp;

                remainder = div % _numericBase;
                div = div / _numericBase;
            }
            tmp = _base[remainder] + tmp;

            return tmp;
        }

        public int ToNumber(string numberString)
        {
            int index = numberString.Length - 1;
            int value = 0;
            int power = 0;
            while (index >= 0)
            {
                char currentChar = numberString[index];
                var currentValue = _base.IndexOf(currentChar);
                value += currentValue * (int)Math.Pow(_numericBase, power);
                power++;
                --index;
            }

            return value;
        }
    }



    public static void Main()
    {
        var converter = new NumberConverter(NumberConverter.Bigger);
        int userId = 755757;
        var numberString = converter.ToString(userId); // prints g759
        var value = converter.ToNumber(numberString);
    }

您可以通过添加uris中允许的更多内容来缩短数字。

Theres可能是一种更有效的方法。按位操作不是我的区域。

更新2

  

URI中允许但没有保留目的的字符称为unreserved。这些包括大写和小写字母,十进制数字,连字符,句点,下划线和波浪号。

  unreserved  = ALPHA / DIGIT / "-" / "." / "_" / "~"

这意味着您可以使用它们来缩短网址(除非您的网络服务器正在使用它们来做其他事情)