100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > java 生成随机编码_Java生成随机编码

java 生成随机编码_Java生成随机编码

时间:2021-11-30 12:19:03

相关推荐

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();

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。