上课的时候老师让我们根据身份证号判断一个人的生肖和星座,其实这两个问题都是在用substring来截取身份证中间的关于出生年月日的那段字符。只要截取到字符,剩下的问题也就迎刃而解。
public class Check
{
public static final int ID_length=18;
public static String GetYear(String ID)
{
Integer len=ID.length();
if(len<ID_length)
return null;
return ID.substring(6,10);
}
public static String GetMonth(String ID)
{
Integer len=ID.length();
if(len<ID_length)
return null;
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)
{
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)
{
int year=Integer.parseInt(Re.GetYear(ID));
String zodia[]={"鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"};
int i=(year-4)%12;
String value=zodia[i];
return value;
}
public static void main(String[] args)
{
String idCard = "";
System.out.println(Check.GetConstellation(idCard));
System.out.println(Check.GetZodia(idCard));
}
}
总结:代码的实现并不难,主要是分析获取的这个过程。相对来说,这个代码只能简单的实现这个功能,如果考虑健壮性的话是应该加几个判断的,比如判断身份证号是否合法、获取的数字是否合法等等,而且这个代码只能满足18位身份证号的查询,如果是15位的身份证号则会出现问题。