1.使用方法

#获取省份ID
create temporary function getProvIdByCardIdUDF as 'com.st.PersonInfoByCardIdUDF.getProvIdByCardIdUDF'
using jar 'hdfs:///HIVE_UDF/PersonInfoByCardIdUDF.jar';
#获取省份名称
create temporary function getProvNameByCardIdUDF as 'com.st.PersonInfoByCardIdUDF.getProvNameByCardIdUDF' using jar 'hdfs:///HIVE_UDF/PersonInfoByCardIdUDF.jar';
#获取年龄
create temporary function getAgeByCardIdUDF as 'com.st.PersonInfoByCardIdUDF.getAgeByCardIdUDF' using jar 'hdfs:///HIVE_UDF/PersonInfoByCardIdUDF.jar';
#获取生日(YYYY-MM-DD)
create temporary function getBirthDayByCardIdUDF as 'com.st.PersonInfoByCardIdUDF.getBirthDayByCardIdUDF' using jar 'hdfs:///HIVE_UDF/PersonInfoByCardIdUDF.jar';
#获取性别(男、女、null)
create temporary function getGenderByCardIdUDF as 'com.st.PersonInfoByCardIdUDF.getGenderByCardIdUDF' using jar 'hdfs:///HIVE_UDF/PersonInfoByCardIdUDF.jar';

 

2.获取省份ID

package com.st.PersonInfoByCardIdUDF;

import java.util.HashMap;
import java.util.Map; import org.apache.hadoop.hive.ql.exec.UDF; /*
* Name:getProvIdByCardIdUDF
* Author:Jim
* Date:2018-06-29
* Email:764309404@qq.com
* Description:根据身份证获取省份ID
* Example:
*
* */ public class getProvIdByCardIdUDF extends UDF{ public static Map<String, String> map = new HashMap(); //构造函数,获取省份名称
public getProvIdByCardIdUDF() {
map.put("", "北京市");
map.put("", "天津市");
map.put("", "河北省");
map.put("", "山西省");
map.put("", "内蒙古自治区");
map.put("", "辽宁省");
map.put("", "吉林省");
map.put("", "黑龙江省");
map.put("", "上海市");
map.put("", "江苏省");
map.put("", "浙江省");
map.put("", "安徽省");
map.put("", "福建省");
map.put("", "江西省");
map.put("", "山东省");
map.put("", "河南省");
map.put("", "湖北省");
map.put("", "湖南省");
map.put("", "广东省");
map.put("", "广西壮族自治区");
map.put("", "海南省");
map.put("", "重庆市");
map.put("", "四川省");
map.put("", "贵州省");
map.put("", "云南省");
map.put("", "西藏自治区");
map.put("", "陕西省");
map.put("", "甘肃省");
map.put("", "青海省");
map.put("", "宁夏回族自治区");
map.put("", "新疆维吾尔自治区");
map.put("", "台湾省");
map.put("", "香港特别行政区");
map.put("", "澳门特别行政区");
} public String evaluate(String cardid) throws Exception { String provId = null ; cardid = cardid.trim(); if(cardid.length()>=) {
try { String key = cardid.substring(, ); provId = key; }catch(Exception e) { provId = null; }
} return provId;
} }

2.获取省份名称

package com.st.PersonInfoByCardIdUDF;

import java.util.HashMap;
import java.util.Map; import org.apache.hadoop.hive.ql.exec.UDF; /*
* Name:getProvNameByCardIdUDF
* Author:Jim
* Date:2018-06-29
* Email:764309404@qq.com
* Description:根据身份证获取省份名称
* Example:
*
* */ public class getProvNameByCardIdUDF extends UDF{ public static Map<String, String> map = new HashMap(); //构造函数,获取省份名称
public getProvNameByCardIdUDF() {
map.put("11", "北京市");
map.put("12", "天津市");
map.put("13", "河北省");
map.put("14", "山西省");
map.put("15", "内蒙古自治区");
map.put("21", "辽宁省");
map.put("22", "吉林省");
map.put("23", "黑龙江省");
map.put("31", "上海市");
map.put("32", "江苏省");
map.put("33", "浙江省");
map.put("34", "安徽省");
map.put("35", "福建省");
map.put("36", "江西省");
map.put("37", "山东省");
map.put("41", "河南省");
map.put("42", "湖北省");
map.put("43", "湖南省");
map.put("44", "广东省");
map.put("45", "广西壮族自治区");
map.put("46", "海南省");
map.put("50", "重庆市");
map.put("51", "四川省");
map.put("52", "贵州省");
map.put("53", "云南省");
map.put("54", "西藏自治区");
map.put("61", "陕西省");
map.put("62", "甘肃省");
map.put("63", "青海省");
map.put("64", "宁夏回族自治区");
map.put("65", "新疆维吾尔自治区");
map.put("71", "台湾省");
map.put("81", "香港特别行政区");
map.put("82", "澳门特别行政区");
} public String evaluate(String cardid) throws Exception { String provname = null ; cardid = cardid.trim(); if(cardid.length()>=15) {
try { String key = cardid.substring(0, 2); provname = map.get(key); }catch(Exception e) { provname = null; }
} return provname;
} }

3.获取年龄

package com.st.PersonInfoByCardIdUDF;

import java.time.LocalDate;
import java.time.Period; import org.apache.hadoop.hive.ql.exec.UDF; /*
* Name:getAgeByCardIdUDF
* Author:Jim
* Date:2018-06-29
* Email:764309404@qq.com
* Description:根据身份证获取年龄
* Example:
*
* */
public class getAgeByCardIdUDF extends UDF { public int evaluate(String cardId) throws Exception { int age = 0 ; try { LocalDate today = LocalDate.now(); cardId = cardId.trim(); if(cardId.length()==18) { String year_month_date_id = cardId.substring(6,14);
String year = year_month_date_id.substring(0, 4);
String month = year_month_date_id.substring(4, 6);
String date = year_month_date_id.substring(6,8);
LocalDate birthDate = LocalDate.parse(year+"-"+month+"-"+date);
Period p = Period.between(birthDate, today);
age = p.getYears() + 1; }else if (cardId.length()==15) { String year_month_date_id = cardId.substring(6,12);
String year = "19" + year_month_date_id.substring(0, 2);
String month = year_month_date_id.substring(2, 4);
String date = year_month_date_id.substring(4,6);
LocalDate birthDate = LocalDate.parse(year+"-"+month+"-"+date);
Period p = Period.between(birthDate, today);
age = p.getYears() + 1 ; }else {
age = 0;
} }catch(Exception e) { age = 0; }
return age; } }

4.获取生日

package com.st.PersonInfoByCardIdUDF;
import java.time.LocalDate;
import java.time.Period; import org.apache.hadoop.hive.ql.exec.UDF; /*
* Name:getBirthDayByCardIdUDF
* Author:Jim
* Date:2018-06-29
* Email:764309404@qq.com
* Description:根据身份证获取生日 YYYY-MM-DD
* Example:
*
* */ public class getBirthDayByCardIdUDF extends UDF{ public String evaluate(String cardId) throws Exception { String birthday = null; try
{
cardId = cardId.trim(); if(cardId.length()==18) {
String year_month_date_id = cardId.substring(6,14);
String year = year_month_date_id.substring(0, 4);
String month = year_month_date_id.substring(4, 6);
String date = year_month_date_id.substring(6,8);
//LocalDate birthDate = LocalDate.parse(year+"-"+month+"-"+date);
birthday = year+"-"+month+"-"+date; }else if (cardId.length()==15) {
String year_month_date_id = cardId.substring(6,12);
String year = "19" + year_month_date_id.substring(0, 2);
String month = year_month_date_id.substring(2, 4);
String date = year_month_date_id.substring(4,6);
//LocalDate birthDate = LocalDate.parse(year+"-"+month+"-"+date);
birthday = year+"-"+month+"-"+date; }else {
birthday = null;
}
}catch(Exception e) { birthday = null; }
return birthday; } }

5.获取性别

package com.st.PersonInfoByCardIdUDF;

import org.apache.hadoop.hive.ql.exec.UDF;

/*
* Name:getBirthDayByCardIdUDF
* Author:Jim
* Date:2018-06-29
* Email:764309404@qq.com
* Description:根据身份证获取生日 YYYY-MM-DD
* Example:
* 返回值:
* 1:男
* 2:女
* 3.NULL
* */ public class getGenderByCardIdUDF extends UDF{ public String evaluate(String cardId) throws Exception { String gender = null;
try {
cardId = cardId.trim();
if(cardId.length()==15 || cardId.length() == 18 ) {
int s = cardId.charAt(cardId.length()-2) - '0';
if(s%2==0) {
gender = "女";
}else {
gender = "男";
}
}
}catch(Exception e) {
gender = null;
} return gender; } }

UDF-Java提取身份证内信息的更多相关文章

  1. 个人永久性免费-Excel催化剂功能第88波-批量提取pdf文件信息(图片、表格、文本等)

    日常办公场合中,除了常规的Excel.Word.PPT等文档外,还有一个不可忽略的文件格式是pdf格式,而对于想从pdf文件中获取信息时,常规方法将变得非常痛苦和麻烦.此篇给大家送一pdf文件提取信息 ...

  2. java对身份证验证及正则表达式解析

    原文地址:http://www.cnblogs.com/zhongshengzhen/ java对身份证验证及正则表达式解析 package service; import java.text.Par ...

  3. 通过查询数据库中的数据匹配在页面上:(set单条数据属性是在页面上的显示与foreach的不同) 通过ID修改提取位置表信息

    ACTION   OpenModifyExtractPositionById // set单条数据属性 /* * 通过ID修改提取位置表信息 */ public String OpenModifyEx ...

  4. Excel提取身份证出生日期②

    问题场景 从user表中的身份信息中提取用户的出生日期: 以下方法也可适用于提取其他数据,不仅是身份证信息: 以下图中数据都为测试数据,不具备真实性! 场景一 user表中的18位身份证,提取出生日期 ...

  5. js从字符串中提取身份证号,连续18位数字

    <!DOCTYPE html> <html> <head> <title>提取身份证号</title> <meta charset=& ...

  6. java获取当前操作系统的信息

    java获取当前操作系统的信息 JavaOS虚拟机UnixEXT  从网上收集的一些关于java获取操作系统信息的方法,现在总结一下: 1获取本机的IP地址: private static Strin ...

  7. PHP提取身份证号码中的生日并验证是否成年的函数

    php 提取身份证号码中的生日日期以及确定是否成年的一个函数.可以同时确定15位和18位的身份证,经本人亲测,非常好用,分享函数代码如下: <?php //用php从身份证中提取生日,包括15位 ...

  8. java获取天气预报的信息

    运行效果: 主要功能: 1,jsp页面输入省份和城市 根据条件获取当地的天气信息 2,java代码 利用第三方的省份和城市的路径地址 本工程主要实现java获取天气预报的信息步骤1,创建工程weath ...

  9. 联系我们_站内信息_站内资讯_网上定制衬衫|衬衫定制|衬衫定做-ChenShanLe衬衫乐

    联系我们_站内信息_站内资讯_网上定制衬衫|衬衫定制|衬衫定做-ChenShanLe衬衫乐 衬衫乐定制网是国内领先的成衣定制机构,专业从事衬衫网络在线定制.高级定制服装的价格不菲,而衬衫乐运用了&qu ...

随机推荐

  1. 【FZU2178】礼物分配

    题意 在双胞胎兄弟Eric与R.W的生日会上,他们共收到了N个礼物,生日过后他们决定分配这N个礼物(numv+numw=N).对于每个礼物他们俩有着各自心中的价值vi和wi,他们要求各自分到的礼物数目 ...

  2. 9-queue

    在C++中只要#include<queue>即可使用队列类,其中在面试或笔试中常用的成员函数如下(按照最常用到不常用的顺序) 1. push 2. pop 3. size 4. empty ...

  3. 关于super关键字

    1.在Java中,有时会遇到子类中的成员变量或方法与父类中的成员变量或方法同名.此时父类的成员变量或方法就会被隐藏(可以理解为重写),如果还想要使用父类中的这个成员变量或方法,就需要用到super. ...

  4. web.xml配置详解[转]

    引文: 对于一个J2EE领域的程序员而言,基本上每天都会和web应用打交道. 什么是web应用?最简单的web应用什么样?给你一个web应用你该从何入手? 1.什么是web应用? web应用是一种可以 ...

  5. leetcode - database - 177. Nth Highest Salary (Oracle)

    题目链接:https://leetcode.com/problems/nth-highest-salary/description/ 题意:查询出表中工资第N高的值 思路: 1.先按照工资从高到低排序 ...

  6. LA4794 分享巧克力

    Sharing Chocolate Chocolate in its many forms is enjoyed by millions of people around the world ever ...

  7. Perl 学习笔记-哈希

    1.Perl中的哈希 高效快捷, 没有大小限制. 大哈希一样很快! 命名: 和Perl其他标识符一样, 同时拥有自己的的名字空间.  $roger{"sex"} 和 $roger没 ...

  8. Centos6 hadoop2.6.0安装笔记

    系统环境: linux:Centos6-64bit hadoop:hadoop2.6.0 jdk:1.6.45 集群方式安装 一台master,3台slave master 192.168.111.1 ...

  9. java Calender类

    1.Calender和Date相互转化 public static void main(String[] args) { // TODO Auto-generated method stub Cale ...

  10. JAVA中简单的MD5加密类(MD5Utils)

    MD5加密分析:   JDK API:   获取对象的API:   加密的API:   package cn.utils; import java.security.MessageDigest; im ...