UDF-Java提取身份证内信息
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提取身份证内信息的更多相关文章
- 个人永久性免费-Excel催化剂功能第88波-批量提取pdf文件信息(图片、表格、文本等)
日常办公场合中,除了常规的Excel.Word.PPT等文档外,还有一个不可忽略的文件格式是pdf格式,而对于想从pdf文件中获取信息时,常规方法将变得非常痛苦和麻烦.此篇给大家送一pdf文件提取信息 ...
- java对身份证验证及正则表达式解析
原文地址:http://www.cnblogs.com/zhongshengzhen/ java对身份证验证及正则表达式解析 package service; import java.text.Par ...
- 通过查询数据库中的数据匹配在页面上:(set单条数据属性是在页面上的显示与foreach的不同) 通过ID修改提取位置表信息
ACTION OpenModifyExtractPositionById // set单条数据属性 /* * 通过ID修改提取位置表信息 */ public String OpenModifyEx ...
- Excel提取身份证出生日期②
问题场景 从user表中的身份信息中提取用户的出生日期: 以下方法也可适用于提取其他数据,不仅是身份证信息: 以下图中数据都为测试数据,不具备真实性! 场景一 user表中的18位身份证,提取出生日期 ...
- js从字符串中提取身份证号,连续18位数字
<!DOCTYPE html> <html> <head> <title>提取身份证号</title> <meta charset=& ...
- java获取当前操作系统的信息
java获取当前操作系统的信息 JavaOS虚拟机UnixEXT 从网上收集的一些关于java获取操作系统信息的方法,现在总结一下: 1获取本机的IP地址: private static Strin ...
- PHP提取身份证号码中的生日并验证是否成年的函数
php 提取身份证号码中的生日日期以及确定是否成年的一个函数.可以同时确定15位和18位的身份证,经本人亲测,非常好用,分享函数代码如下: <?php //用php从身份证中提取生日,包括15位 ...
- java获取天气预报的信息
运行效果: 主要功能: 1,jsp页面输入省份和城市 根据条件获取当地的天气信息 2,java代码 利用第三方的省份和城市的路径地址 本工程主要实现java获取天气预报的信息步骤1,创建工程weath ...
- 联系我们_站内信息_站内资讯_网上定制衬衫|衬衫定制|衬衫定做-ChenShanLe衬衫乐
联系我们_站内信息_站内资讯_网上定制衬衫|衬衫定制|衬衫定做-ChenShanLe衬衫乐 衬衫乐定制网是国内领先的成衣定制机构,专业从事衬衫网络在线定制.高级定制服装的价格不菲,而衬衫乐运用了&qu ...
随机推荐
- 一款比较好用的JS时间控件-laydate
官方讲解:http://laydate.layui.com/ 具体的内容请看官方讲解,此处仅说名应用: 1.在jsp或html或其他中引入laydate.js <script src=&qu ...
- 字符串查找 · Implement strStr()
[抄题]: 对于一个给定的 source 字符串和一个 target 字符串,你应该在 source 字符串中找出 target 字符串出现的第一个位置(从0开始).如果不存在,则返回 -1. 如果 ...
- Madgwick算法详细解读
Madgwick算法详细解读 极品巧克力 前言 接上一篇文章<Google Cardboard的九轴融合算法>. Madgwick算法是另外一种九轴融合的方法,广泛应用在旋翼飞行器上,效果 ...
- 安装运行okvis odometry
源码链接https://github.com/ethz-asl/okvis 1. 安装依赖项 sudo apt-get install cmake sudo apt-get install libgo ...
- vs2017编译并配置libcurl入门教程
libcurl可以用来发送http请求,是c/c++发送http请求常用的库 下载libcurl源码包: libcurl下载地址:https://curl.haxx.se/download.html ...
- SimpleDateFormat是线程不安全的
线程不安全的SimpleDateFormat SimpleDateFormat是线程不安全的 SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但 ...
- 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default
部署MVC的时候,因为服务器.NET版本是4.5.1,所以在vs将.NET版本降到4.5.1的时候发布报错. 原因:C#6降到C#5导致 解决办法:修改web.config配置 ,编译选项改为comp ...
- [GO]使用bufio的文件读取方式
package main import ( "os" "fmt" "bufio" "io" ) func ReadFil ...
- C++中的深拷贝和浅拷贝 QT中的深拷贝,浅拷贝和隐式共享
下面是C++中定义的深,浅拷贝 当用一个已初始化过了的自定义类类型对象去初始化另一个新构造的对象的时候,拷贝构造函数就会被自动调用.也就是说,当类的对象需要拷贝时,拷贝构造函数将会被调用.以下情况都会 ...
- HDU 6096 String (AC自动机)
题意:给出n个字符串和q个询问,每次询问给出两个串 p 和 s .要求统计所有字符串中前缀为 p 且后缀为 s (不可重叠)的字符串的数量. 析:真是觉得没有思路啊,看了官方题解,真是好复杂. 假设原 ...