java 生成随机编码_Java生成随机编码
在我们的实际开发中,经常会遇到生成随机编码的问题,编码一般是英文和数字的结合,有点类似于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生成随机编码相关推荐
- java给定任意_java生成任意整数随机数(任意指定范围)
Math.random() jdk1.8文档描述: 1.求:范围为 [ 0 ,352324 ] 之间的随机数.(包括临界值) (int)( Math.random () * ( 352324 +1) ...
- java 单开程序_java生成jar包并且单进程运行的实例
java文件打包jar运行 有效步骤: 1.cmd 到当前目录(默认包主类所在目录为例) set classpath = 默认包主类所在目录 2.javac 主类名.java 3.java 主类名 4 ...
- java生成密码_java生成密码生成 | 学步园
一.根据当前日期生成MD5加密密码 package com.test; import java.security.MessageDigest; import java.text.SimpleDateF ...
- java随机姓名_Java生成随机姓名、性别和年龄的实现示例
一.定义实体类Person,封装生成的数据 package net.dc.test; public class Person { private String name; private String ...
- java 日期随机数_Java 生成指定时间范围的随机时间、随机中文姓名、随机字符姓名、随机数...
解决问题: Java生成指定时间范围的随机时间? Java生成随机中文姓名? Java生成随机字符姓名? Java生成随机数? 代码: import java.io.UnsupportedEncodi ...
- java 生成随机数_Java 生成随机数的 N 种方法
原标题:Java 生成随机数的 N 种方法 www.baeldung.com/java-generating-random-numbers 1.引言 本文将探讨用 Java 生成随机数的不同方法. 2 ...
- java uuid 第三方_JAVA生成短8位UUID
java 原创,转载需注明. 短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个. 本算法利用62个可打印字符,通过随机生成32位UUID,由于UU ...
- java生成条码_Java生成商品条形码
之前没有使用过这个,现在使用JBarcode生成商品条形码,工作之前的准备工作: Eclipse: Eclipse Java EE IDE for Web Developers. Version: H ...
- java word插件开发_java生成word的几种方案
1. Jacob是Java-COM Bridge的缩写,它在Java与微软的COM组件之间构建一座桥梁.使用Jacob自带的DLL动态链接库,并通过JNI的方式实现了在Java平台上对COM程序的调用 ...
最新文章
- [MySQL 5.1 体验]MySQL 事件调度器(Event Scheduler)
- vs2008页面布局GridLayout绝对定位的设置
- 笔记本html连接电视机,WinXP系统的笔记本如何连接电视?笔记本连接液晶电视方法...
- 将Spring Boot应用程序与Amazon Cognito集成
- gridview 通用分页实现
- 【CV-Learning】线性分类器(SVM基础)
- 苹果云服务器满,苹果云备份满了怎么清理
- 微信小程序等第三方应用接入易班的api
- urllib3爬取网页源代码(爬虫)
- 怎样快速实现两台电脑硬盘文件共享?
- 宿舍管理系统之登录功能
- 塔望3W消费战略全案丨绿力冬瓜茶 三十年饮料老品牌,两年复兴战全国
- 基于PLUS模型+InVEST模型 生态系统服务多情景模拟预测
- 概率论与数理统计(知识点概览)
- 笔记本出厂预装Win8改装Win7的操作步骤及常见问题___联想e430c之类可供参考
- 怎么删除桌面上多余的ie浏览器图标?
- tf.function
- 现行统编中学数学教科书有多烂
- 脚本的不同含义及理解。打游戏时脚本
- that girl计算机音乐,最近很火的英文歌《That girl》原版,好听到爆!
热门文章
- 桃词典 Peach Dictionary 简易英语词典app开发 安卓软件开发 Part 3
- Gateway网关的使用
- Restful API 生成复杂Json数据结构及使用客户端解析该数据结构(三)
- 【论文笔记】AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions
- xp java安装_xp下安装jdk8
- html打开方式怎么没有,打开文件时右键菜单中没有“打开方式”怎么办?
- Your proxy appears to only use HTTP and not HTTPS, try changing your proxy URL to be HTTP. (解決)
- 常见点击反应(Click Reactions)及其试剂——CuAAC
- 使用Python编写面向安卓模拟器的明日方舟挂机脚本
- 无人机与卡车联合配送 - README