怎么用Java产生不重复的邀请码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用Java产生不重复的邀请码相关的知识,希望对你有一定的参考价值。

参考技术A //生成十位数奖品兑换码
public static void test13() throws Exception
    int count = 10;
    String str="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    StringBuilder sb = new StringBuilder();
    Random r = new Random(System.currentTimeMillis());
    for (int i = 0; i < count; i++) 
        int d =r.nextInt(62);
        sb.append(str.charAt(d));
    
    System.out.println(sb.toString());

JAVA邀请码生成器


code


import java.util.Random;

/**
 * 邀请码生成器,算法原理:&lt;br/&gt;
 * 1) 获取id: 1127738 &lt;br/&gt;
 * 2) 使用自定义进制转为:gpm6 &lt;br/&gt;
 * 3) 转为字符串,并在后面加‘o‘字符:gpm6o &lt;br/&gt;
 * 4)在后面随机产生若干个随机数字字符:gpm6o7 &lt;br/&gt;
 * 转为自定义进制后就不会出现o这个字符,然后在后面加个‘o‘,这样就能确定唯一性。最后在后面产生一些随机字符进行补全。&lt;br/&gt;
 */
public final 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) &gt; 0) {
            int ind=(int)(id % binLen);
            // System.out.println(num + "--&gt;" + ind);
            buf[--charPos]=r[ind];
            id /= binLen;
        }
        buf[--charPos]=r[(int)(id % binLen)];
        // System.out.println(num + "--&gt;" + num % binLen);
        String str=new String(buf, charPos, (32 - charPos));
        // 不够长度的自动随机补全
        if(str.length() &lt; s) {
            StringBuilder sb=new StringBuilder();
            sb.append(b);
            Random rnd=new Random();
            for(int i=1; i &lt; 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 &lt; chs.length; i++) {
            int ind=0;
            for(int j=0; j &lt; binLen; j++) {
                if(chs[i] == r[j]) {
                    ind=j;
                    break;
                }
            }
            if(chs[i] == b) {
                break;
            }
            if(i &gt; 0) {
                res=res * binLen + ind;
            } else {
                res=ind;
            }
            // System.out.println(ind + "--&gt;" + res);
        }
        return res;
    }
}

以上是关于怎么用Java产生不重复的邀请码的主要内容,如果未能解决你的问题,请参考以下文章

用PHP怎么实现注册会员时要用邀请码才能注册的功能 - 技术问答

java 生成随机不重复邀请码 - RC4加密和UUID

Java生成8位随机邀请码,不重复

php怎么写邀请码才能注册

随机不重复邀请码

随机不重复邀请码