`
lws0402
  • 浏览: 109573 次
  • 性别: 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编程中,生成验证码是一种常见的需求,通常用于身份验证或防止机器人自动操作...通过这样的实现,我们可以生成符合要求的四位验证码,既能保证无重复,又能确保相邻字符不重复,提高了验证码的安全性和用户体验。

    利用时间生成8位不重复数

    在IT开发领域,生成不重复的编号或标识符是一个常见的需求,特别是在数据库记录、订单号、唯一用户ID等场景。为了满足这一需求,开发者经常利用系统时间作为基础,结合其他算法来生成这样的唯一序列。标题提到的...

    java产生不重复的随机数

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

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

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

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

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

    邀请码生成算法文档

    ### 邀请码生成算法知识点详解 #### 一、邀请码生成算法概述 邀请码是一种常见的用户身份验证方式,在很多互联网应用中被广泛采用。本文档主要介绍了一种特定的邀请码生成算法,该算法通过字母加数字的组合方式来...

    java生成推广二维码

    在这个“java生成推广二维码”的项目中,我们主要探讨的是如何使用Java来创建具有美化效果和推广功能的二维码。 首先,我们需要了解二维码的基本原理。二维码(Quick Response Code)是一种二维条形码,能够存储...

    java随机生成12位密码

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

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

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

    20位不重复id生成器

    生成20位不重复id,生成6位验证码,生成uuid等等帮助方法

    Java三种生成条形码的源码(barcode4j、jbarcode、google-zxing)

    以下是关于使用Java生成条形码的三个主要方法的详细解释:barcode4j、jbarcode和google-zxing。 1. **barcode4j**: Barcode4J是一个开源的Java库,基于Apache 2.0许可,专门用于生成各种类型的条形码。它使用XML...

    java生成条形码

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

    Java生成物流打印单(条形码,二维码)

    在Java编程环境中,生成物流打印单是常见的任务之一,尤其对于电商或物流公司而言。这个过程通常涉及到条形码和二维码的生成,以便于快速准确地识别包裹信息。在这个项目中,开发者利用了Java的Graphics2D图形库以及...

    JAVA生成订单号(日期+流水号)

    ### JAVA生成订单号(日期+流水号)的知识点解析 #### 一、概述 在现代电商及金融系统中,订单号作为唯一标识符扮演着极其重要的角色。它不仅需要具备唯一性,还要易于管理和追踪。本文将详细介绍一个通过Java语言...

    Java中不重复随机数的生成与分析.pdf

    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