在我们的实际开发中,经常会遇到生成随机编码的问题,编码一般是英文和数字的结合,有点类似于UUID那样,我在网上找了一些生成编码的规则,大都是Random random = new Random()去生成,由于项目中要用到,今天总结了一下生成随机编码的规则,这里会用到根据自增ID生成编码;

创建字典:

首先去创建一个随机数的字典,以后我们要取哪个数都可以到字典里面去取;

0

F

1

M

2

L

3

1

4

3

5

4

6

5

7

2

8

0

9

8

a

X

b

C

c

J

d

D

e

Q

f

S

THREEPARTCODE

6,7,9,A,B,E,G,H,K,N,P,R,T,V,W,Y

FOURPARTCODE

0,1,2,3,4,5,6,7,8,9,Q,W,E,R,T,Y,P,A,S,D,F,G,H,J,K,L,X,C,V,B,N,M

先解释一下字典的第一部分,因为我们的ID是自增的,有可能会很多,所以我们要把ID转换成16进制的,上面的一部分就是对应的所有的16进制。而第二部分则是我们为16进制的编码第一部分补上一位的编码,第二部分的编码不属于16进制,这样的话我们就避免了前两部分重复,最后一部分是把所缺的编码给补齐;

private static Map map = new HashMap();

private static final String PATH = "/back-product/back-product-business/codeRegular.xml";

private static String threePart[] = null; //第二部分

private static String fourPart[] = null; //第三部分

private static Map twoPart = new HashMap(); //第一部分

private static Logger log = LoggerFactory.getLogger(CodeUtil.class);

static {

init();

}

private static void init() {

try {

String globalPath = System.getProperty("global.config.path");

InputStream is = new FileInputStream(new File(globalPath + PATH));

File configDir = new File(globalPath + PATH);

SAXReader reader = new SAXReader();

//通过流读取

Document document = reader.read(is);

//获得文档的根节点

Element element = document.getRootElement();

// 得到所有带Row的行数

Iterator iterator = element.elementIterator("Row");

while (iterator.hasNext()) { //遍历把值存入twoPart里面

Element ele = iterator.next();

twoPart.put(ele.element("KEY").getTextTrim(),

ele.element("VALUE").getTextTrim());

}

Iterator iterator2 = element.elementIterator("Multiple");

while (iterator2.hasNext()) {

Element ele = iterator2.next();

if (ele.element("KEY").getTextTrim().equals("THREEPARTCODE")) {

// three

threePart = ele.element("VALUE").getTextTrim().split(",");

} else {

// four

fourPart = ele.element("VALUE").getTextTrim().split(",");

}

}

is.close();

} catch (Exception e) {

log.error(e.getMessage());

}

}

/**

* 获取产品编码

*

* @param type

* 产品类型

* @param ProductId

* 产品id

* @return

*/

public static String getProductCode(Integer type, Long productId) {

if (type == null || productId == null) {

return null;

}

StringBuffer sb = new StringBuffer();

StringBuffer encodeProductId = new StringBuffer();

sb.append(type);

//转16进制

String hexString = Integer.toHexString(productId.intValue());

char[] charArray = hexString.toCharArray();

for (char c : charArray) {

sb.append(twoPart.get(String.valueOf(c))); //添加第一部分

}

Random random = new Random();

int nextInt = random.nextInt(threePart.length);

sb.append(threePart[nextInt]); //补上第二部分

int temp = sb.length();

for (int i = 0; i < 10 - temp; i++) { //补齐代码

sb.append(fourPart[random.nextInt(fourPart.length)]);

}

return sb.toString();

}

上面就是根据ID生成不重复编码的规则了;下面会有一个生成随机编码的规则,但是并不能保证其不重复;

/*/

* 生成随机编码

*/

public static String getWarehouseCode(int count){

StringBuffer sb = new StringBuffer();

Random random = new Random(); //生成随机数

for(int i=0;i

sb.append(fourPart[random.nextInt(fourPart.length)]);

}

return sb.toString();

}

java 生成随机编码_Java生成随机编码相关推荐

  1. java给定任意_java生成任意整数随机数(任意指定范围)

    Math.random() jdk1.8文档描述: 1.求:范围为 [ 0 ,352324 ] 之间的随机数.(包括临界值) (int)( Math.random () * ( 352324 +1) ...

  2. java 单开程序_java生成jar包并且单进程运行的实例

    java文件打包jar运行 有效步骤: 1.cmd 到当前目录(默认包主类所在目录为例) set classpath = 默认包主类所在目录 2.javac 主类名.java 3.java 主类名 4 ...

  3. java生成密码_java生成密码生成 | 学步园

    一.根据当前日期生成MD5加密密码 package com.test; import java.security.MessageDigest; import java.text.SimpleDateF ...

  4. java随机姓名_Java生成随机姓名、性别和年龄的实现示例

    一.定义实体类Person,封装生成的数据 package net.dc.test; public class Person { private String name; private String ...

  5. java 日期随机数_Java 生成指定时间范围的随机时间、随机中文姓名、随机字符姓名、随机数...

    解决问题: Java生成指定时间范围的随机时间? Java生成随机中文姓名? Java生成随机字符姓名? Java生成随机数? 代码: import java.io.UnsupportedEncodi ...

  6. java 生成随机数_Java 生成随机数的 N 种方法

    原标题:Java 生成随机数的 N 种方法 www.baeldung.com/java-generating-random-numbers 1.引言 本文将探讨用 Java 生成随机数的不同方法. 2 ...

  7. java uuid 第三方_JAVA生成短8位UUID

    java 原创,转载需注明. 短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UU ...

  8. java生成条码_Java生成商品条形码

    之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作: Eclipse: Eclipse Java EE IDE for Web Developers. Version: H ...

  9. java word插件开发_java生成word的几种方案

    1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用 ...

最新文章

  1. [MySQL 5.1 体验]MySQL 事件调度器(Event Scheduler)
  2. vs2008页面布局GridLayout绝对定位的设置
  3. 笔记本html连接电视机,WinXP系统的笔记本如何连接电视?笔记本连接液晶电视方法...
  4. 将Spring Boot应用程序与Amazon Cognito集成
  5. gridview 通用分页实现
  6. 【CV-Learning】线性分类器(SVM基础)
  7. 苹果云服务器满,苹果云备份满了怎么清理
  8. 微信小程序等第三方应用接入易班的api
  9. urllib3爬取网页源代码(爬虫)
  10. 怎样快速实现两台电脑硬盘文件共享?
  11. 宿舍管理系统之登录功能
  12. 塔望3W消费战略全案丨绿力冬瓜茶 三十年饮料老品牌,两年复兴战全国
  13. 基于PLUS模型+InVEST模型 生态系统服务多情景模拟预测
  14. 概率论与数理统计(知识点概览)
  15. 笔记本出厂预装Win8改装Win7的操作步骤及常见问题___联想e430c之类可供参考
  16. 怎么删除桌面上多余的ie浏览器图标?
  17. tf.function
  18. 现行统编中学数学教科书有多烂
  19. 脚本的不同含义及理解。打游戏时脚本
  20. that girl计算机音乐,最近很火的英文歌《That girl》原版,好听到爆!

热门文章

  1. 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 3
  2. Gateway网关的使用
  3. Restful API 生成复杂Json数据结构及使用客户端解析该数据结构(三)
  4. 【论文笔记】AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions
  5. xp java安装_xp下安装jdk8
  6. html打开方式怎么没有,打开文件时右键菜单中没有“打开方式”怎么办?
  7. Your proxy appears to only use HTTP and not HTTPS, try changing your proxy URL to be HTTP. (解決)
  8. 常见点击反应(Click Reactions)及其试剂——CuAAC
  9. 使用Python编写面向安卓模拟器的明日方舟挂机脚本
  10. 无人机与卡车联合配送 - README