parent
d7d615dfe8
commit
282e5196c4
3 changed files with 1214 additions and 1119 deletions
@ -0,0 +1,83 @@ |
||||
package org.jeecg.common.util; |
||||
|
||||
import java.util.Random; |
||||
|
||||
public class UniqueRanNumUtils { |
||||
|
||||
/** |
||||
* 自定义进制(排除0,1,o,l) |
||||
*/ |
||||
private static final char[] CUSTOM = 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'}; |
||||
|
||||
/** |
||||
* 不能与自定义进制有重复 |
||||
*/ |
||||
private static final char FLAG = 'H'; |
||||
|
||||
/** |
||||
* 进制长度 |
||||
*/ |
||||
private static final int LENGTH = CUSTOM.length; |
||||
|
||||
/** |
||||
* 序列最小长度 |
||||
*/ |
||||
private static final int MINLENGTH = 6; |
||||
|
||||
/** |
||||
* 根据ID生成六位随机码 |
||||
* @return 随机码 |
||||
*/ |
||||
public static String generateCode(long id) { |
||||
char[] buf = new char[32]; |
||||
int charPos = 32; |
||||
|
||||
while ((id / LENGTH) > 0) { |
||||
int ind = (int) (id % LENGTH); |
||||
buf[--charPos] = CUSTOM[ind]; |
||||
id /= LENGTH; |
||||
} |
||||
buf[--charPos] = CUSTOM[(int) (id % LENGTH)]; |
||||
String str = new String(buf, charPos, (32 - charPos)); |
||||
// 不够长度的自动随机补全
|
||||
if (str.length() < MINLENGTH) { |
||||
StringBuilder sb = new StringBuilder(); |
||||
sb.append(FLAG); |
||||
Random rnd = new Random(); |
||||
for (int i = 1; i < MINLENGTH - str.length(); i++) { |
||||
sb.append(CUSTOM[rnd.nextInt(LENGTH)]); |
||||
} |
||||
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 < LENGTH; j++) { |
||||
if (chs[i] == CUSTOM[j]) { |
||||
ind = j; |
||||
break; |
||||
} |
||||
} |
||||
if (chs[i] == FLAG) { |
||||
break; |
||||
} |
||||
if (i > 0) { |
||||
res = res * LENGTH + ind; |
||||
} else { |
||||
res = ind; |
||||
} |
||||
} |
||||
return res; |
||||
} |
||||
|
||||
public static void main(String[] args) { |
||||
for (int i = 0; i < 10; i++) { |
||||
System.out.println(generateCode(i)); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue