xufei 2 years ago
parent
commit
5b0ff9c4a4

+ 13 - 6
src/main/java/com/winhc/bigdata/udf/id_trans.java

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

File diff suppressed because it is too large
+ 166 - 0
src/main/java/com/winhc/bigdata/utils/IDCardUtil.java