按需求随机生成N位长度的随机数,随机数中由字母和数字随机组成。
import java.util.Random;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.hive.ql.udf.UDFType;
import org.apache.hadoop.io.Text;
@UDFType(deterministic = false)
public class UDFSysguid extends UDF {
private Random random = new Random();
private Text result = new Text();
public Text evaluate(int length) {
result.set(getCharAndNumr(length));
return result;
}
private String getCharAndNumr(int length) {
StringBuffer val = new StringBuffer();
for (int i = 0; i < length; i++) {//从第一位开始生成随机数,直到长度和length一样
String charOrNum = random.nextInt(2) % 2 == 0 ? "char" : "num"; // 随机决定输出字母还是数字
if ("char".equalsIgnoreCase(charOrNum)) // 字符串
{
int choice = 65; // 大写字母65,小写字母96
val.append((char) (choice + random.nextInt(26)));
} else if ("num".equalsIgnoreCase(charOrNum)) // 数字
{
val.append(String.valueOf(random.nextInt(10)));
}
}
return val.toString();
}
//main函数测试数据
public static void main(String[] args) {
UDFSysguid udr = new UDFSysguid();
System.out.println(udr.evaluate(12));
System.out.println(udr.evaluate(12));
System.out.println(udr.evaluate(3));
System.out.println(udr.evaluate(3));
System.out.println(udr.evaluate(3));
}
}
//测试结果如下,因为是随机,每次执行的结果都不一致,如下分别生成长度为3和12的随机数。
07T939TH78P7
0KTTI3PWWOGL
850
2LT
1N6