`
lws0402
  • 浏览: 108554 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

java生成不重复的用户邀请码

    博客分类:
  • java
 
阅读更多
直接上代码,根据一个值M(可以是用户唯一表示,如主键id,或手机号)来生成对应的码N,如果M相同,生成的N始终相同

/**
 * 邀请码生成器,算法原理:<br/>
 * 1) 获取id: 1127738 <br/>
 * 2) 使用自定义进制转为:gpm6 <br/>
 * 3) 转为字符串,并在后面加'o'字符:gpm6o <br/>
 * 4)在后面随机产生若干个随机数字字符:gpm6o7 <br/>
 * 转为自定义进制后就不会出现o这个字符,然后在后面加个'o',这样就能确定唯一性。最后在后面产生一些随机字符进行补全。<br/>
 *
 */
public class ShareCodeUtils {
	public static void main(String[] args) {
		System.out.println(ShareCodeUtils.toSerialCode(13880461763L));
	}
 
    /** 自定义进制(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);
            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.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 < 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;
            }
            // System.out.println(ind + "-->" + res);
        }
        return res;
    }
}
分享到:
评论

相关推荐

    java生成十个不重复的随机数

    在Java编程中,生成十个不...以上就是使用Java生成十个不重复随机数的两种主要方法。无论选择哪种方式,都需要根据具体需求和性能要求进行权衡。在实际开发中,理解这些算法背后的逻辑和可能的优化方向是至关重要的。

    Java生成不重复的任意位随机数

    巧用Java实现得到任意位永不重复的随机数,很经典的代码!

    java随机产生四位验证码(相邻码不重复)两种算法实现

    在Java编程中,生成验证码是一种常见的需求,通常用于身份验证或防止机器人自动操作...通过这样的实现,我们可以生成符合要求的四位验证码,既能保证无重复,又能确保相邻字符不重复,提高了验证码的安全性和用户体验。

    java产生不重复的随机数

    java代码产生不重复的随机数,有用处,可以参考!

    简单的递归算法 随机生成不重复的双色球号码

    用简短的JAVA代码使用递归算法生成随机不重复的双色球号码

    java生成一维码

    总之,Java生成一维码主要依赖于第三方库,如ZXing。通过这些库,可以方便地将数据编码为一维码图像,然后在各种应用场景中使用,如网页、打印标签等。在实际开发中,还需要考虑到错误处理、一维码格式的选择以及与...

    Java生成兑换码工具类(英文26个字母加数字随机生成)

    生成指定位数的兑换码,(数字、大写字母随机混排)+(数字、小写字母随机混排)+(小写字母与数字混排),三种方式生成兑换码!

    java用户密码修改

    在Java编程环境中,用户密码修改是一项常见的功能,尤其是在开发Web应用程序时,如使用JSP(Java Server Pages)处理用户界面。本主题将深入探讨如何在Java中实现用户密码的修改,以及与MySQL数据库的交互。 首先,...

    java 随机产生指定长度的用户名字母 数字格式

    1. **Random 类的使用**:`java.util.Random` 是Java中的一个类,用于生成伪随机数。 2. **字符数组与StringBuffer 的使用**:字符数组用来存储可能被选中的字符集;`StringBuffer` 用来构建最终的随机字符串。 3. *...

    java随机生成12位密码

    java随机生成12位密码,自己写的,分享出来供大家免费使用

    Java 生成校验码及校验码判断

    Java作为广泛应用的编程语言,提供了丰富的工具和方法来生成和验证校验码。本篇将深入探讨如何在Java中实现校验码的生成以及如何在Web项目中应用这些校验码。 首先,校验码的基本原理是通过特定算法对原始数据进行...

    Java实现生成n个不重复的随机数

    Java实现生成n个不重复的随机数 Java实现生成n个不重复的随机数是非常常见的需求,例如在游戏、数据分析、机器学习等领域中都需要生成随机数。下面将详细介绍Java实现生成n个不重复的随机数的方法。 首先,我们...

    java实现条形码二维码生成含文字标签信息

    本篇将深入探讨如何使用Java结合ZXing库来生成包含文字标签信息的条形码和二维码。 ZXing,全称为“Zebra Crossing”,是一个开源的、跨平台的条码读取和生成项目。它支持多种条码格式,包括一维条形码(如EAN-13、...

    java生成条形码

    ### Java生成条形码:参数配置与代码实践 在企业级应用中,特别是在涉及大量商品库存管理的场景下,条形码技术的应用显得尤为重要。它不仅简化了库存追踪和商品识别的过程,还大大提高了工作效率。Java作为一种广泛...

    生成指定随机数不重复的例子(可用)

    下面我们将深入探讨如何在Java中生成指定范围内不重复的随机数,以及如何将代码整合到myEclipse环境中。 首先,我们要理解Java中的`java.util.Random`类,它是生成随机数的基础。`Random`类提供了多种方法来生成...

    myeclipse注册码java生成类

    总之,“myeclipse注册码java生成类”是一个涉及软件授权和Java编程的复杂话题,需要结合具体代码才能给出更详细的解释。在这个过程中,了解和遵守软件许可法律是非常重要的,以免引起不必要的法律风险。

    Java 生成条码 保存在pdf上例子(亲测)

    Java生成条码并将其保存在PDF上的技术是一个实用的编程任务,常见于自动化文档处理、库存管理和产品标签等领域。在本示例中,我们将探讨如何使用Java实现这一功能,并涉及如何添加水印以增强PDF的安全性和标识性。 ...

    JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写

    JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写 本文主要介绍了JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写,通过示例代码详细介绍了该工具类的实现过程,为读者提供了一个有价值的学习参考。 ...

    java生成和解析一维码二维码

    Java生成和解析一维码二维码是一项常见的编程任务,特别是在物联网(IoT)和移动应用中。一维码,如条形码,常用于商品的库存管理和零售业;而二维码则包含更多数据,常用于电子票务、信息分享和追踪物流等场景。在...

Global site tag (gtag.js) - Google Analytics