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; /// /// 根据ID生成六位随机邀请码 /// /// 用户id /// 返回6位邀请码 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; } } }