如何通过身份证,切割获取性别,年龄,属相,星座,性别,生日

怎么讲呢,首先我们先了解身份证的构成。

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));
			      
			      
		}
}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值