static void Main(string[] args)
{
int userId = 100001;//用户id
string code = Encode(userId);
string decode = Decode(code);
Console.WriteLine(code);
Console.WriteLine(decode);
Console.ReadLine();
}
/** 自定义进制(0、O没有加入,容易混淆;同时排除X,用X补位) */
private static char[] r = new char[] { 'Q', 'W', 'E', '8', 'A', 'S', '2', 'D', 'Z', '9', 'C', '7', 'P', '5', 'I', 'K', '3', 'M', 'J', 'U', 'F', 'R', '4', 'V', 'Y', 'L', 'T', 'N', '6', 'B', 'G', 'H' };
/**(不能与自定义进制有重复) */
private static char b = 'X';
/** 进制长度 */
private static int binLen = r.Length;
/** 生成的邀请码长度 */
private static int s = 6;
/**
* 根据ID生成六位随机邀请码
* @param long id
* @return 随机码
*/
public static string Encode(long id)
{
char[] buf = new char[32];
int charPos = 32;
while ((id / binLen) > 0)
{
int ind = (int)(id % binLen);
buf[--charPos] = r[ind];
id /= binLen;
}
buf[--charPos] = r[(int)(id % binLen)];
String str = new String(buf, charPos, (32 - charPos));
//不够长度的自动随机补全
if (str.Length < s)
{
StringBuilder sb = new StringBuilder();
sb.Append(b);
Random rnd = new Random();
for (int i = 1; i < s - str.Length; i++)
{
sb.Append(r[rnd.Next(binLen)]);
}
str += sb.ToString();
}
return str;
}
/**
* 根据随机邀请码获得UserId
* @param string code
* @return ID
*/
public static string Decode(string code)
{
char[] chs = code.ToArray();
long res = 0L;
for (int i = 0; i < chs.Length; i++)
{
int ind = 0;
for (int j = 0; j < binLen; j++)
{
if (chs[i] == r[j])
{
ind = j;
break;
}
}
if (chs[i] == b)
{
break;
}
if (i > 0)
{
res = res * binLen + ind;
}
else
{
res = ind;
}
}
return res.ToString();
}