怎么讲呢,首先我们先了解身份证的构成。
1 地址码
(身份证前六位)表示编码对象常住户口所在县(市、镇、区)的行政区划代码。1-2位省、自治区、直辖市代码; 3-4位地级市、盟、自治州代码; 5-6位县、县级市、区代码;
2 生日期码
(身份证第七位到第十四位)表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。
3 顺序码
(身份证第十五位到十七位)地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。
4 校验码
(身份证最后一位)是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么此人的身份证就变成了19位,而19位的号码违反了国家标准,并且中国的计算机应用系统也不承认19位的身份证号码。Ⅹ是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。
以下是代码。
package bao1;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class ceshi {
//设定长度
public static final int ID_length=18;
//获取年份
public static String GetYear(String ID){
Integer leg = ID.length();
if(leg<ID_length){
return "输入身份证号码有误请确认后在输入";
}
return ID.substring(6, 10);
}
//获取月份
public static String GetMonth(String ID){
Integer leg = ID.length();
if(leg<ID_length){
return "";
}
return ID.substring(10, 12);
}
//获取出生日期
public static String GetDay(String ID)
{
Integer len=ID.length();
if(len<ID_length)
return null;
return ID.substring(12,14);
}
//通过身份证号码判断星座
public static String GetConstellation(String ID){
ceshi re = new ceshi();
int month = Integer.parseInt(re.GetMonth(ID));
int day = Integer.parseInt(re.GetDay(ID));
String value = "";
if(((month==3) && (day >=21)) || ((month==4) &&(day<=19))) value="白羊座";
if(((month==4) && (day >=20)) || ((month==5) &&(day<=20))) value="金牛座";
if(((month==5) && (day >=21)) || ((month==6) &&(day<=21))) value="双子座";
if(((month==6) && (day >=22)) || ((month==7) &&(day<=22))) value="巨蟹座";
if(((month==7) && (day >=23)) || ((month==8) &&(day<=22))) value="狮子座";
if(((month==8) && (day >=23)) || ((month==9) &&(day<=22))) value="处女座";
if(((month==9) && (day >=23)) || ((month==10) &&(day<=23))) value="天秤座";
if(((month==10) && (day >=24)) || ((month==11) &&(day<=22))) value="天蝎座";
if(((month==11) && (day >=23)) || ((month==12) &&(day<=21))) value="射手座";
if(((month==12) && (day >=22)) || ((month==1) &&(day<=19))) value="摩羯座";
if(((month==1) && (day >=20)) || ((month==2) &&(day<=18))) value="水瓶座";
if(((month==2) && (day >=19)) || ((month==3) &&(day<=20))) value="双鱼座";
return value;
}
//判断属相
public static String GetZodia(String ID){
ceshi Re = new ceshi();
int year=Integer.parseInt(Re.GetYear(ID));
String zodia[]={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};
int i=(year-4)%12;
String value=zodia[i];
return value;
}
//根据身份证号得到年龄
public static int IdNOToAge(String IdNO){
int leh = IdNO.length();
String dates="";
if (leh == 18) {
dates = IdNO.substring(6, 10);
}else{
dates = IdNO.substring(6, 8);
dates = "19"+dates;
}
SimpleDateFormat df = new SimpleDateFormat("yyyy");
String year=df.format(new Date());
int u=Integer.parseInt(year)-Integer.parseInt(dates);
return u;
}
public static void main(String[] args) {
ceshi ce = new ceshi();
String id ="320826199908083241";
String birth = id.substring(6, 14);
String sex = id.substring(16, 17);
if(Integer.parseInt(sex)%2==0){
sex = "女";
}else{
sex ="男";
}
System.out.println("生日:"+birth+"性别"+sex);
System.out.println(ce.IdNOToAge(id));
System.out.println(ce.GetConstellation(id));
System.out.println(ce.GetZodia(id));
}
}