行号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
举例 | 5 | 3 | 0 | 1 | 0 | 2 | 1 | 9 | 2 | 0 | 0 | 5 | 0 | 8 | 0 | 1 | 1 | X |
含义 | 升级行政区代码 | 地级行政区代码 | 县级行政区代码 | 出生年 | 出生月 | 出生年日 | 顺序码奇数是男性,偶数是女性 | 校验 |
// 获取生日信息
String str = id.substring(6, 10).concat(" 年 ")
.concat(id.substring(10, 12)).concat(" 月 ")
.concat(id.substring(12, 14)).concat(" 日 ");
System.out.println("你的出生日期是:" + str);
private static String getSex(String id) {
// TODO Auto-generated method stub
// 15-17顺序码,同一个地区同年同月同日生的编码 奇数是男性,偶数是女性
int num = Integer.parseInt(id.substring(14, 17));
String sex;
if (num % 2 == 1) {
// System.out.println("性别:男");
sex = "男";
} else {
// System.out.println("性别:女");
sex = "女";
}
return sex;
}
private static String getAddress(String id) {
// TODO Auto-generated method stub
// 创建文件对象
Properties p = new Properties();
try {
p.load(new FileInputStream("sfzid.properties"));
// 加载文件
String str1 = id.substring(0, 6);
String address = p.getProperty(str1);
// System.out.println(address);
return address;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
System.out.println("找不到文件");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
return null;
}
/*
* 身份证校验码的计算方法
*
* 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4
* -2。
*
* 2、将这17位数字和系数相乘的结果相加。
*
* 3、用加出来和除以11,看余数是多少?
*
* 4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X
* -9-8-7-6-5-4-3-2。
*
* 5、通过上面得知如果余数是3,就会在身份证的第18位数字上出现的是9。如果对应的数字是10,身份证的最后一位号码就是罗马数字x
*/
private static boolean checkID(String id) {
// TODO Auto-generated method stub
// 使用正则表达式判断 组成规则 前17位是数字,后1为是 数字或x
boolean flag = false;
String regex = "\\d{17}[0-9Xx]";
// flag = id.matches(regex);
if (!id.matches(regex)) {
return false;
}
// 7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
int[] d1 = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
// 1-0-X -9-8-7-6-5-4-3-2。
String[] endId = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3",
"2" };
int sum = 0;
char[] chs = id.toCharArray();
for (int x = 0; x < 17; x++) {
sum = sum + Integer.parseInt(String.valueOf(chs[x])) * d1[x];
}
// 获取最后一位的字符
String end = endId[sum % 11];
flag = end.equalsIgnoreCase(id.substring(17));
return flag;
}
110000 = \u5317\u4EAC\u5E02
110100 = \u5317\u4EAC\u5E02\u5E02\u8F96\u533A
110101 = \u5317\u4EAC\u5E02\u4E1C\u57CE\u533A
110102 = \u5317\u4EAC\u5E02\u897F\u57CE\u533A
110103 = \u5317\u4EAC\u5E02\u5D07\u6587\u533A
private static int[] data_sub(String id) {
// TODO Auto-generated method stub
int[] data = new int[3];
// 获取出生时的年月日
int birth_year = Integer.parseInt(id.substring(6, 10));
int birth_month = Integer.parseInt(id.substring(10, 12));
int birth_day = Integer.parseInt(id.substring(12, 14));
// 获取现在时间
Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH) + 1; // 获取的月份是实际月份 +1
int day = c.get(Calendar.DATE);
// 计算这个月有多少天
c.set(year, birth_month + 1, 1); // 下一个月的第一天
c.add(Calendar.DATE, -1); // 提前一天
int count_day = c.get(Calendar.DATE);
// 判断从出生到现在过了多少年月日
int sub_day;
int month_sub = 0;
int year_sub = 0;
int sub_month;
int sub_year;
// 计算过了多少天
if (day - birth_day >= 0) {
sub_day = day - birth_day;
} else {
sub_day = (day + count_day - birth_day);
month_sub = 1;
}
// 计算过了多少月
if (month - month_sub - birth_month >= 0) {
sub_month = month - month_sub - birth_month;
} else {
sub_month = month + 12 - month_sub - birth_month;
year_sub = 1;
}
// 计算过多少年
sub_year = year - year_sub - birth_year;
// System.out.println("你已经活了" + sub_year + " 年 " + sub_month + " 个月 "
// + sub_day + " 天");
data[0] = sub_year;
data[1] = sub_month;
data[2] = sub_day;
return data;
}
/**
* 计算出了已经活了多少天了
*
* @param id
* @return
* @throws ParseException
*/
private static int liveDay(String id) throws ParseException {
// TODO Auto-generated method stub
SimpleDateFormat sd = new SimpleDateFormat("yyyyMMdd");
Date d1 = sd.parse(id.substring(6, 14));
long t1 = d1.getTime();
long t2 = System.currentTimeMillis();
int day = (int) ((t2 - t1) / 1000 / 60 / 60 / 24);
return day;
}
261.31 KB, 下载次数: 159
修改版
// 获取生日信息
String str = id.substring(6, 10).concat(" 年 ")
.concat(id.substring(10, 12)).concat(" 月 ")
.concat(id.substring(12, 14)).concat(" 日 ");
System.out.println("你的出生日期是:" + str);
袁志娜 发表于 2016-11-9 23:28
源码在哪呢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |