直接上代码,根据一个值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编程中,生成验证码是一种常见的需求,通常用于身份验证或防止机器人自动操作...通过这样的实现,我们可以生成符合要求的四位验证码,既能保证无重复,又能确保相邻字符不重复,提高了验证码的安全性和用户体验。
在IT开发领域,生成不重复的编号或标识符是一个常见的需求,特别是在数据库记录、订单号、唯一用户ID等场景。为了满足这一需求,开发者经常利用系统时间作为基础,结合其他算法来生成这样的唯一序列。标题提到的...
该压缩包内含唯一码生成程序,以及已经生成好的可直接使用的唯一码(SQL),所有码均不重复,保证唯一,程序为PHP写的,生成为MySQL的SQL文件,可直接导入使用!
这是自动生成不重复主键的代码包,直接导包进入程序即可使用,帮助生成由字母数字组成的16位id号,可以用于数据库主键存储(使用数据库自增主键始终有问题,不适合大型程序的使用),该代码包运用于很多大型企业级...
总之,Java生成一维码主要依赖于第三方库,如ZXing。通过这些库,可以方便地将数据编码为一维码图像,然后在各种应用场景中使用,如网页、打印标签等。在实际开发中,还需要考虑到错误处理、一维码格式的选择以及与...
生成指定位数的兑换码,(数字、大写字母随机混排)+(数字、小写字母随机混排)+(小写字母与数字混排),三种方式生成兑换码!
### 邀请码生成算法知识点详解 #### 一、邀请码生成算法概述 邀请码是一种常见的用户身份验证方式,在很多互联网应用中被广泛采用。本文档主要介绍了一种特定的邀请码生成算法,该算法通过字母加数字的组合方式来...
在这个“java生成推广二维码”的项目中,我们主要探讨的是如何使用Java来创建具有美化效果和推广功能的二维码。 首先,我们需要了解二维码的基本原理。二维码(Quick Response Code)是一种二维条形码,能够存储...
java随机生成12位密码,自己写的,分享出来供大家免费使用
然而,尽管Java代码可以在任何支持Java虚拟机(JVM)的平台上运行,但有时开发者需要在特定操作系统上生成机器码,以便进行性能优化或者与硬件更紧密地交互。在这个场景中,"JAVA在Windows平台上生成机器码"指的是将...
Java实现生成n个不重复的随机数 Java实现生成n个不重复的随机数是非常常见的需求,例如在游戏、数据分析、机器学习等领域中都需要生成随机数。下面将详细介绍Java实现生成n个不重复的随机数的方法。 首先,我们...
本篇将深入探讨如何使用Java结合ZXing库来生成包含文字标签信息的条形码和二维码。 ZXing,全称为“Zebra Crossing”,是一个开源的、跨平台的条码读取和生成项目。它支持多种条码格式,包括一维条形码(如EAN-13、...
生成20位不重复id,生成6位验证码,生成uuid等等帮助方法
以下是关于使用Java生成条形码的三个主要方法的详细解释:barcode4j、jbarcode和google-zxing。 1. **barcode4j**: Barcode4J是一个开源的Java库,基于Apache 2.0许可,专门用于生成各种类型的条形码。它使用XML...
### Java生成条形码:参数配置与代码实践 在企业级应用中,特别是在涉及大量商品库存管理的场景下,条形码技术的应用显得尤为重要。它不仅简化了库存追踪和商品识别的过程,还大大提高了工作效率。Java作为一种广泛...
在Java编程环境中,生成物流打印单是常见的任务之一,尤其对于电商或物流公司而言。这个过程通常涉及到条形码和二维码的生成,以便于快速准确地识别包裹信息。在这个项目中,开发者利用了Java的Graphics2D图形库以及...
### JAVA生成订单号(日期+流水号)的知识点解析 #### 一、概述 在现代电商及金融系统中,订单号作为唯一标识符扮演着极其重要的角色。它不仅需要具备唯一性,还要易于管理和追踪。本文将详细介绍一个通过Java语言...
Java中不重复随机数的生成与分析 Java 中不重复随机数的生成与分析是软件开发中的一个重要问题。随机数以其不确定性和偶然性等特点,因此在软件开发中得到了广泛应用。例如,在软件系统的测试中,用于产生具有普遍...
Java生成条码并将其保存在PDF上的技术是一个实用的编程任务,常见于自动化文档处理、库存管理和产品标签等领域。在本示例中,我们将探讨如何使用Java实现这一功能,并涉及如何添加水印以增强PDF的安全性和标识性。 ...