package com.feinar.cbs.common;
import java.util.Random;
import java.util.UUID;
public class GUID {
private static int index = 0;
private static final GUID instance = new GUID();
public static GUID getInstance() {
return instance;
}
private final static int intMax = 24;
private final static char[] ch = { 'A', 'B', 'C', 'E', 'F', 'K', 'M', 'P', 'Q',
'R', 'T', 'U', 'W', 'Z', '1', '2', '3', '4', '5', '6', '7', '8',
'9', '0' };
private int getNum(char schar) {
switch (schar) {
case 'A':
return 1;
case 'B':
return 2;
case 'C':
return 3;
case 'D':
return 4;
case 'E':
return 5;
case 'F':
return 6;
case 'K':
return 7;
case 'M':
return 8;
case 'P':
return 9;
case 'Q':
return 0;
case 'R':
return 10;
case 'T':
return 11;
case 'U':
return 12;
case 'W':
return 13;
case 'Z':
return 14;
case '1':
return 15;
case '2':
return 16;
case '3':
return 17;
case '4':
return 18;
case '5':
return 19;
case '6':
return 20;
case '7':
return 21;
case '8':
return 22;
case '9':
return 23;
case '0':
return 24;
default:
return 1;
}
}
// 得到前N-1位随机数
private String getRanstr(int intLength) {
Random rd = new Random();
rd.setSeed(System.currentTimeMillis()+index);
if(index>100){
index=0;
}else{
index++;
}
StringBuffer sb = new StringBuffer();
for (int i = 0; i < intLength; i++) {
sb.append(ch[rd.nextInt(intMax)]);
}
return sb.toString();
}
// 得到最后一位数
private String getLast(String strs) {
int sum = 0;
for (int i = 0; i < strs.length(); i++) {
int nums = getNum(strs.charAt(i));
sum += nums * i;
}
int k = sum % 11;
if (k == 0) {
return String.valueOf(0);
}
if (k == 10) {
return "X";
}
return String.valueOf(k);
}
// 取得16随机数
public String get16() {
String str = getRanstr(15);
str = str.concat(getLast(str));
return str;
}
// 取得12随机数
public String get12() {
String strg = getRanstr(11);
strg = strg.concat(getLast(strg));
return strg;
}
public static void main(String[] args) {
System.out.println(getInstance().get16());
// UUID uuid = UUID.randomUUID();
// System.out.println(uuid);
}
}