|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Reflection;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace GDZZ.Core
|
|
|
|
|
{
|
|
|
|
|
public class InvitaCode
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
//自定义进制(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 length = 6;
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 根据ID生成六位随机邀请码
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="id">用户id</param>
|
|
|
|
|
/// <returns>返回6位邀请码</returns>
|
|
|
|
|
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 < length)
|
|
|
|
|
{
|
|
|
|
|
StringBuilder sb = new StringBuilder();
|
|
|
|
|
sb.Append(b);
|
|
|
|
|
Random rnd = new Random();
|
|
|
|
|
for (int i = 1; i < length - str.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
sb.Append(r[rnd.Next(binLen)]);
|
|
|
|
|
}
|
|
|
|
|
str += sb.ToString();
|
|
|
|
|
}
|
|
|
|
|
return str;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|