首页>代码> java 18位身份证验证小组件idchecker>/idchecker/src/cn/idchecker/entity/ID.java
package cn.idchecker.entity;

/**
 * 身份证号码
 * 例如:320105198209275127 -> 
 * addr   birth    seq  check
 * 320105 19820927 512  7
 * @author rongxinhua
 *
 */
public class ID {
	
	private String num;		//全长身份证号码
	private String addr;	//地址
	private String birth;	//生日
	private String seq;		//序号
	private String check;	//校验码
	
	

	/**
	 * 构造方法 1
	 * @param num 格式如:"320105198209275127"
	 */
	public ID(String num) {
		this.num = num;
		this.addr = num.substring(0, 6);
		this.birth = num.substring(6, 14);
		this.seq = num.substring(14,17);
		this.check = num.substring(17,18);
	}
	
	/**
	 * 构造方法 2
	 * @param addr 地址码, 格式如:"320105"
	 * @param birth 生日码,格式如:"19820927"
	 * @param seq 顺序码,格式如:"512"
	 * @param check 校验码,格式如:"7"
	 */
	public ID(String addr, String birth, String seq, String check) {
		this.addr = addr;
		this.birth = birth;
		this.seq = seq;
		this.check = check;
		this.num = addr + birth + seq + check;
	}

	/**
	 * 分离身份证号码
	 * @return 字符数组
	 */
	public char[] separate(){
		return this.num.toCharArray();
	}
	
	/**
	 * 分离身份证号码
	 * @return 整型数组,最后一位若是'X',则返回10
	 */
	public int[] separate2int(){
		int length = 18;
		int[] ins = new int[length];
		int i = 0;
		for( ; i < length - 1; i ++) {
			ins[i] = Integer.valueOf(num.substring(i, i+1));
		}
		String last = num.substring(i, i+1);
		ins[i] = "X".equals(last) ? 10 : Integer.valueOf(last);
		return ins;
	}
	
	/**
	 * 计算校验位
	 * @return 
	 */
	public String caculateCheckCode(){
		int total = 0;		//校验值和
		int length = 18;	//身份证长度
		int[] ins = new int[length];
		int[] checkCodes = Checkcode.checkCodes;
		int i = 0;
		try{
			for( ; i < length - 1; i ++) {
				ins[i] = Integer.valueOf(num.substring(i, i+1));
				total += (ins[i]*checkCodes[i]);
			}
		} catch(NumberFormatException e) {
			return null;
		}
		
		int modResult = total % 11;
		return Checkcode.checkResult(modResult);
		
	}
	
	/**
	 * 获取中文格式的出生年月日
	 * @return 
	 */
	public String getFormatBirth(){
		return birth.substring(0, 4) + "年" + birth.substring(4,6) + "月" + birth.substring(6,8) + "日";
	}
	
	/**
	 * 获取性别
	 * @return
	 */
	public String getSex() {
		return seq.charAt(2)%2 == 0 ? "女" : "男";
	}
	
	public String getAddr() {
		return addr;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}

	public String getBirth() {
		return birth;
	}

	public void setBirth(String birth) {
		this.birth = birth;
	}

	public String getSeq() {
		return seq;
	}

	public void setSeq(String seq) {
		this.seq = seq;
	}

	public String getCheck() {
		return check;
	}

	public void setCheck(String check) {
		this.check = check;
	}
	

	public String getNum() {
		return num;
	}

	public void setNum(String num) {
		this.num = num;
	}
	

}
最近下载更多
aaaabbbc  LV1 2022年5月24日
zzs269285304  LV7 2020年10月29日
gww666  LV2 2019年6月5日
dongzhan  LV12 2019年5月6日
张老师123456  LV7 2019年4月12日
安宇12345  LV15 2019年3月25日
yu7510  LV15 2019年1月15日
依然在路上  LV17 2019年1月2日
安安an  LV17 2018年11月28日
huangqiwei  LV1 2018年10月13日
最近浏览更多
ClydeSon  LV5 2023年12月28日
一起加油  LV3 2023年3月24日
eddie2260  LV2 2022年6月17日
微微笑的笑笑  LV3 2022年6月14日
miiiji 2022年6月10日
暂无贡献等级
aaaabbbc  LV1 2022年5月24日
1306878374  LV13 2021年12月26日
zhaoxu123123  LV10 2021年9月9日
zzs269285304  LV7 2020年10月29日
Airavso  LV3 2020年7月26日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友