生成10位的永不重复的字母加数字
各位算法高手,公司有个需求算法小白我实在想不出来,求教。
需求是生成10位的永不重复的字母加数字,不能有特殊字符。
我的思路是用guid生成唯一code,通过md5(16)算出,然后GetHashCode(),之后用固定的字母数字对照表(比如1->A,2->D),生成一段10位的字母加数字。
问题在于GetHashCode返回的数据是不固定长度的,有9位有10,也就是我生成的长度不统一了。
各位有没有更好的办法啊?
其实要求就是每次生成的string必须是唯一的10位字符串,我不知道有什么好的算法,我自己的这种做法很傻,请各位指教。
取md5结果的前10能否永不重复?
用了guid 作为种子
现在就要解决,怎么把guid变成一个10位的数字加字母。
private string getStr()
{
string s = GetMd5Str(Guid.NewGuid().ToString());
return Math.Abs(s.GetHashCode()).ToString();
}
/// <summary>
/// MD5 16位加密
/// </summary>
/// <param name="ConvertString"></param>
/// <returns></returns>
private string GetMd5Str(string ConvertString)
{
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
string t2 = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(ConvertString)), 4, 8);
t2 = t2.Replace("-", "");
return t2;
}