我有几个用户,我想为每个用户生成一个引荐网址,但我认为这样做不会很好
http://domain.com/myusername
我更愿意为自己购买一个缩短的域名,并将myusername
转换为更小的,但不是使用数据库生成,因此它很容易管理,无需拥有特别表格。
是否有一种简单的方法可以将字符串更改为短字符串,反之亦然...或者如果我强制使用数字,我可以随时使用用户ID ...也许转换为其他数字基础?< / p>
任何想法都受到赞赏:)
答案 0 :(得分:0)
答案 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可能是一种更有效的方法。按位操作不是我的区域。
URI中允许但没有保留目的的字符称为unreserved。这些包括大写和小写字母,十进制数字,连字符,句点,下划线和波浪号。
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
这意味着您可以使用它们来缩短网址(除非您的网络服务器正在使用它们来做其他事情)