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