直接上代码,根据一个值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生成一维码主要依赖于第三方库,如ZXing。通过这些库,可以方便地将数据编码为一维码图像,然后在各种应用场景中使用,如网页、打印标签等。在实际开发中,还需要考虑到错误处理、一维码格式的选择以及与...
生成指定位数的兑换码,(数字、大写字母随机混排)+(数字、小写字母随机混排)+(小写字母与数字混排),三种方式生成兑换码!
在Java编程环境中,用户密码修改是一项常见的功能,尤其是在开发Web应用程序时,如使用JSP(Java Server Pages)处理用户界面。本主题将深入探讨如何在Java中实现用户密码的修改,以及与MySQL数据库的交互。 首先,...
1. **Random 类的使用**:`java.util.Random` 是Java中的一个类,用于生成伪随机数。 2. **字符数组与StringBuffer 的使用**:字符数组用来存储可能被选中的字符集;`StringBuffer` 用来构建最终的随机字符串。 3. *...
java随机生成12位密码,自己写的,分享出来供大家免费使用
Java作为广泛应用的编程语言,提供了丰富的工具和方法来生成和验证校验码。本篇将深入探讨如何在Java中实现校验码的生成以及如何在Web项目中应用这些校验码。 首先,校验码的基本原理是通过特定算法对原始数据进行...
Java实现生成n个不重复的随机数 Java实现生成n个不重复的随机数是非常常见的需求,例如在游戏、数据分析、机器学习等领域中都需要生成随机数。下面将详细介绍Java实现生成n个不重复的随机数的方法。 首先,我们...
本篇将深入探讨如何使用Java结合ZXing库来生成包含文字标签信息的条形码和二维码。 ZXing,全称为“Zebra Crossing”,是一个开源的、跨平台的条码读取和生成项目。它支持多种条码格式,包括一维条形码(如EAN-13、...
### Java生成条形码:参数配置与代码实践 在企业级应用中,特别是在涉及大量商品库存管理的场景下,条形码技术的应用显得尤为重要。它不仅简化了库存追踪和商品识别的过程,还大大提高了工作效率。Java作为一种广泛...
下面我们将深入探讨如何在Java中生成指定范围内不重复的随机数,以及如何将代码整合到myEclipse环境中。 首先,我们要理解Java中的`java.util.Random`类,它是生成随机数的基础。`Random`类提供了多种方法来生成...
总之,“myeclipse注册码java生成类”是一个涉及软件授权和Java编程的复杂话题,需要结合具体代码才能给出更详细的解释。在这个过程中,了解和遵守软件许可法律是非常重要的,以免引起不必要的法律风险。
Java生成条码并将其保存在PDF上的技术是一个实用的编程任务,常见于自动化文档处理、库存管理和产品标签等领域。在本示例中,我们将探讨如何使用Java实现这一功能,并涉及如何添加水印以增强PDF的安全性和标识性。 ...
JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写 本文主要介绍了JAVA 16位ID生成工具类含16位不重复的随机数数字+大小写,通过示例代码详细介绍了该工具类的实现过程,为读者提供了一个有价值的学习参考。 ...
Java生成和解析一维码二维码是一项常见的编程任务,特别是在物联网(IoT)和移动应用中。一维码,如条形码,常用于商品的库存管理和零售业;而二维码则包含更多数据,常用于电子票务、信息分享和追踪物流等场景。在...