import java.util.random; /** * 邀请码生成器,算法原理:
* 1) 获取id: 1127738
* 2) 使用自定义进制转为:gpm6
* 3) 转为字符串,并在后面加'o'字符:gpm6o
* 4)在后面随机产生若干个随机数字字符:gpm6o7
* 转为自定义进制后就不会出现o这个字符,然后在后面加个'o',这样就能确定唯一性。最后在后面产生一些随机字符进行补全。
* @author jiayu.qiu */ public class sharecodeutil { /** 自定义进制(0,1没有加入,容易与o,l混淆) */ private static final char[] r=new char[]{'q', 'w', 'e', '8', 'a', 's', '2', 'd', 'z', 'x', '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 final char b='o'; /** 进制长度 */ private static final int binlen=r.length; /** 序列最小长度 */ private static final int s=6; /** * 根据id生成六位随机码 * @param id id * @return 随机码 */ public static string toserialcode(long id) { char[] buf=new char[32]; int charpos=32; while((id / binlen) > 0) { int ind=(int)(id % binlen); // system.out.println(num + --> + ind); buf[--charpos]=r[ind]; id /= binlen; } buf[--charpos]=r[(int)(id % binlen)]; // system.out.println(num + --> + num % 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.nextint(binlen)]); } str+=sb.tostring(); } return str; } public static long codetoid(string code) { char chs[]=code.tochararray(); long res=0l; for(int i=0; i + res); } return res; } }