|
@@ -2,6 +2,7 @@ package com.winhc.bigdata.udf;
|
|
|
|
|
|
import com.aliyun.odps.udf.UDF;
|
|
|
import com.aliyun.odps.utils.StringUtils;
|
|
|
+import com.winhc.bigdata.utils.IDCardUtil;
|
|
|
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
@@ -12,15 +13,20 @@ import java.util.regex.Pattern;
|
|
|
*/
|
|
|
public class id_trans extends UDF {
|
|
|
|
|
|
+ private static final Pattern pattern = Pattern.compile("[^0-9xX]");
|
|
|
+
|
|
|
+
|
|
|
public String evaluate(String id) {
|
|
|
if (StringUtils.isBlank(id)) {
|
|
|
return null;
|
|
|
}
|
|
|
- if (isNumeric(id.substring(0,id.length() - 1))) {
|
|
|
- if (id.length() == 18) {
|
|
|
- return id.replaceAll("\\*","X");
|
|
|
- } else if (id.length() == 15) {
|
|
|
- return trans15bitTo18bit(id);
|
|
|
+ String id_tmp = id.replaceAll("\\*", "X");
|
|
|
+ id_tmp = pattern.matcher(id_tmp).replaceAll("");
|
|
|
+ if (IDCardUtil.idCardValidate(id_tmp)) {
|
|
|
+ if (id_tmp.length() == 18) {
|
|
|
+ return id_tmp;
|
|
|
+ } else if (id_tmp.length() == 15) {
|
|
|
+ return trans15bitTo18bit(id_tmp);
|
|
|
}
|
|
|
}
|
|
|
return null;
|
|
@@ -101,7 +107,8 @@ public class id_trans extends UDF {
|
|
|
}
|
|
|
|
|
|
public static void main(String[] args) {
|
|
|
- String id = "43010219570921303*";
|
|
|
+ String id = "310102197706114820 ";
|
|
|
+ id = "310109410901321 @";
|
|
|
id_trans n = new id_trans();
|
|
|
System.out.println(n.evaluate(id));
|
|
|
}
|