身份证号码18位与15位转换.docx

上传人:b****4 文档编号:5418459 上传时间:2022-12-16 格式:DOCX 页数:21 大小:19.42KB
下载 相关 举报
身份证号码18位与15位转换.docx_第1页
第1页 / 共21页
身份证号码18位与15位转换.docx_第2页
第2页 / 共21页
身份证号码18位与15位转换.docx_第3页
第3页 / 共21页
身份证号码18位与15位转换.docx_第4页
第4页 / 共21页
身份证号码18位与15位转换.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

身份证号码18位与15位转换.docx

《身份证号码18位与15位转换.docx》由会员分享,可在线阅读,更多相关《身份证号码18位与15位转换.docx(21页珍藏版)》请在冰豆网上搜索。

身份证号码18位与15位转换.docx

身份证号码18位与15位转换

身份证18位与15位转换

package;

import;

import;

import;

import;

import;

import;

import;

import;

/**

*身份证工具类

*@authorKobe

*@version2011-08-08

*/

publicclassIdcardUtilsextendsStringUtils{

/**中国公民身份证号码最小长度。

*/

publicstaticfinalintCHINA_ID_MIN_LENGTH=15;

/**中国公民身份证号码最大长度。

*/

publicstaticfinalintCHINA_ID_MAX_LENGTH=18;

/**省、直辖市代码表*/

publicstaticfinalStringcityCode[]={

"11","12","13","14","15","21","22","23","31","32","33","34","35","36","37","41",

"42","43","44","45","46","50","51","52","53","54","61","62","63","64","65","71",

"81","82","91"

};

/**每位加权因子*/

publicstaticfinalintpower[]={

7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2

};

/**第18位校检码*/

publicstaticfinalStringverifyCode[]={

"1","0","X","9","8","7","6","5","4","3","2"

};

/**最低年限*/

publicstaticfinalintMIN=1930;

publicstaticMapcityCodes=newHashMap();

/**台湾身份首字母对应数字*/

publicstaticMaptwFirstCode=newHashMap();

/**香港身份首字母对应数字*/

publicstaticMaphkFirstCode=newHashMap();

static{

cityCodes.put("11","北京");

cityCodes.put("12","天津");

cityCodes.put("13","河北");

cityCodes.put("14","山西");

cityCodes.put("15","内蒙古");

cityCodes.put("21","辽宁");

cityCodes.put("22","吉林");

cityCodes.put("23","黑龙江");

cityCodes.put("31","上海");

cityCodes.put("32","江苏");

cityCodes.put("33","浙江");

cityCodes.put("34","安徽");

cityCodes.put("35","福建");

cityCodes.put("36","江西");

cityCodes.put("37","山东");

cityCodes.put("41","河南");

cityCodes.put("42","湖北");

cityCodes.put("43","湖南");

cityCodes.put("44","广东");

cityCodes.put("45","广西");

cityCodes.put("46","海南");

cityCodes.put("50","重庆");

cityCodes.put("51","四川");

cityCodes.put("52","贵州");

cityCodes.put("53","云南");

cityCodes.put("54","西藏");

cityCodes.put("61","陕西");

cityCodes.put("62","甘肃");

cityCodes.put("63","青海");

cityCodes.put("64","宁夏");

cityCodes.put("65","新疆");

cityCodes.put("71","台湾");

cityCodes.put("81","香港");

cityCodes.put("82","澳门");

cityCodes.put("91","国外");

twFirstCode.put("A",10);

twFirstCode.put("B",11);

twFirstCode.put("C",12);

twFirstCode.put("D",13);

twFirstCode.put("E",14);

twFirstCode.put("F",15);

twFirstCode.put("G",16);

twFirstCode.put("H",17);

twFirstCode.put("J",18);

twFirstCode.put("K",19);

twFirstCode.put("L",20);

twFirstCode.put("M",21);

twFirstCode.put("N",22);

twFirstCode.put("P",23);

twFirstCode.put("Q",24);

twFirstCode.put("R",25);

twFirstCode.put("S",26);

twFirstCode.put("T",27);

twFirstCode.put("U",28);

twFirstCode.put("V",29);

twFirstCode.put("X",30);

twFirstCode.put("Y",31);

twFirstCode.put("W",32);

twFirstCode.put("Z",33);

twFirstCode.put("I",34);

twFirstCode.put("O",35);

hkFirstCode.put("A",1);

hkFirstCode.put("B",2);

hkFirstCode.put("C",3);

hkFirstCode.put("R",18);

hkFirstCode.put("U",21);

hkFirstCode.put("Z",26);

hkFirstCode.put("X",24);

hkFirstCode.put("W",23);

hkFirstCode.put("O",15);

hkFirstCode.put("N",14);

}

/**

*将15位身份证号码转换为18位

*@paramidCard

*15位身份编码

*@return18位身份编码

*/

publicstaticStringconver15CardTo18(StringidCard){

StringidCard18="";

if(idCard.length()!

=CHINA_ID_MIN_LENGTH){

returnnull;

}

if(isNum(idCard)){

//获取出生年月日

Stringbirthday=idCard.substring(6,12);

DatebirthDate=null;

try{

birthDate=newSimpleDateFormat("yyMMdd").parse(birthday);

}catch(ParseExceptione){

e.printStackTrace();

}

Calendarcal=Calendar.getInstance();

if(birthDate!

=null)

cal.setTime(birthDate);

//获取出生年(完全表现形式,如:

2010)

StringsYear=String.valueOf(cal.get(Calendar.YEAR));

idCard18=idCard.substring(0,6)+sYear+idCard.substring(8);

//转换字符数组

char[]cArr=idCard18.toCharArray();

if(cArr!

=null){

int[]iCard=converCharToInt(cArr);

intiSum17=getPowerSum(iCard);

//获取校验位

StringsVal=getCheckCode18(iSum17);

if(sVal.length()>0){

idCard18+=sVal;

}else{

returnnull;

}

}

}else{

returnnull;

}

returnidCard18;

}

/**

*将18位身份证号码转换为15位

*@paramidCard

*18位身份编码

*@return15位身份编码

*/

publicstaticStringconver18CardTo15(StringidCard){

StringidCard15="";

if(idCard.length()!

=CHINA_ID_MAX_LENGTH){

returnnull;

}

StringBuffersb=newStringBuffer(idCard);

sb.deleteCharAt(17);

sb.deleteCharAt(7);

sb.deleteCharAt(6);

idCard15=sb.toString();

returnidCard15;

}

/**

*验证身份证是否合法

*/

publicstaticbooleanvalidateCard(StringidCard){

Stringcard=idCard.trim();

if(validateIdCard18(card)){

returntrue;

}

if(validateIdCard15(card)){

returntrue;

}

String[]cardval=validateIdCard10(card);

if(cardval!

=null){

if(cardval[2].equals("true")){

returntrue;

}

}

returnfalse;

}

/**

*验证18位身份编码是否合法

*

*@paramidCard身份编码

*@return是否合法

*/

publicstaticbooleanvalidateIdCard18(StringidCard){

booleanbTrue=false;

if(idCard.length()==CHINA_ID_MAX_LENGTH){

//前17位

Stringcode17=idCard.substring(0,17);

//第18位

Stringcode18=idCard.substring(17,CHINA_ID_MAX_LENGTH);

if(isNum(code17)){

char[]cArr=code17.toCharArray();

if(cArr!

=null){

int[]iCard=converCharToInt(cArr);

intiSum17=getPowerSum(iCard);

//获取校验位

Stringval=getCheckCode18(iSum17);

if(val.length()>0){

if(val.equalsIgnoreCase(code18)){

bTrue=true;

}

}

}

}

}

returnbTrue;

}

/**

*验证15位身份编码是否合法

*

*@paramidCard

*身份编码

*@return是否合法

*/

publicstaticbooleanvalidateIdCard15(StringidCard){

if(idCard.length()!

=CHINA_ID_MIN_LENGTH){

returnfalse;

}

if(isNum(idCard)){

StringproCode=idCard.substring(0,2);

if(cityCodes.get(proCode)==null){

returnfalse;

}

StringbirthCode=idCard.substring(6,12);

DatebirthDate=null;

try{

birthDate=newSimpleDateFormat("yy").parse(birthCode.substring(0,2));

}catch(ParseExceptione){

e.printStackTrace();

}

Calendarcal=Calendar.getInstance();

if(birthDate!

=null)

cal.setTime(birthDate);

if(!

valiDate(cal.get(Calendar.YEAR),Integer.valueOf(birthCode.substring(2,4)),

Integer.valueOf(birthCode.substring(4,6)))){

returnfalse;

}

}else{

returnfalse;

}

returntrue;

}

/**

*验证10位身份编码是否合法

*

*@paramidCard身份编码

*@return身份证信息数组

*

*[0]-台湾、澳门、香港[1]-性别(男M,女F,未知N)[2]-是否合法(合法true,不合法false)

*若不是身份证件号码则返回null

*

*/

publicstaticString[]validateIdCard10(StringidCard){

String[]info=newString[3];

Stringcard=idCard.replaceAll("[\\(|\\)]","");

if(card.length()!

=8&&card.length()!

=9&&idCard.length()!

=10){

returnnull;

}

if(idCard.matches("^[a-zA-Z][0-9]{9}$")){//台湾

info[0]="台湾";

"11111");

Stringchar2=idCard.substring(1,2);

if(char2.equals("1")){

info[1]="M";

"MMMMMMM");

}elseif(char2.equals("2")){

info[1]="F";

"FFFFFFF");

}else{

info[1]="N";

info[2]="false";

"NNNN");

returninfo;

}

info[2]=validateTWCard(idCard)?

"true":

"false";

}elseif(idCard.matches("^[1|5|7][0-9]{6}\\(?

[0-9A-Z]\\)?

$")){//澳门

info[0]="澳门";

info[1]="N";

//TODO

}elseif(idCard.matches("^[A-Z]{1,2}[0-9]{6}\\(?

[0-9A]\\)?

$")){//香港

info[0]="香港";

info[1]="N";

info[2]=validateHKCard(idCard)?

"true":

"false";

}else{

returnnull;

}

returninfo;

}

/**

*验证台湾身份证号码

*

*@paramidCard

*身份证号码

*@return验证码是否符合

*/

publicstaticbooleanvalidateTWCard(StringidCard){

Stringstart=idCard.substring(0,1);

Stringmid=idCard.substring(1,9);

Stringend=idCard.substring(9,10);

IntegeriStart=twFirstCode.get(start);

Integersum=iStart/10+(iStart%10)*9;

char[]chars=mid.toCharArray();

Integeriflag=8;

for(charc:

chars){

sum=sum+Integer.valueOf(c+"")*iflag;

iflag--;

}

return(sum%10==0?

0:

(10-sum%10))==Integer.valueOf(end)?

true:

false;

}

/**

*验证香港身份证号码(存在Bug,部份特殊身份证无法检查)

*

*身份证前2位为英文字符,如果只出现一个英文字符则表示第一位是空格,对应数字58前2位英文字符A-Z分别对应数字10-35

*最后一位校验码为0-9的数字加上字符"A","A"代表10

*

*

*将身份证号码全部转换为数字,分别对应乘9-1相加的总和,整除11则证件号码有效

*

*

*@paramidCard身份证号码

*@return验证码是否符合

*/

publicstaticbooleanvalidateHKCard(StringidCard){

Stringcard=idCard.replaceAll("[\\(|\\)]","");

Integersum=0;

if(card.length()==9){

sum=(Integer.valueOf(card.substring(0,1).toUpperCase().toCharArray()[0])-55)*9

+(Integer.valueOf(card.substring(1,2).toUpperCase().toCharArray()[0])-55)*8;

card=card.substring(1,9);

}else{

sum=522+(Integer.valueOf(card.substring(0,1).toUpperCase().toCharArray()[0])-55)*8;

}

Stringmid=card.substring(1,7);

Stringend=card.substring(7,8);

char[]chars=mid.toCharArray();

Integeriflag=7;

for(charc:

chars){

sum=sum+Integer.valueOf(c+"")*iflag;

iflag--;

}

if(end.toUpperCase().equals("A")){

sum=sum+10;

}else{

sum=sum+Integer.valueOf(end);

}

return(sum%11==0)?

true:

false;

}

/**

*将字符数组转换成数字数组

*

*@paramca

*字符数组

*@return数字数组

*/

publicstaticint[]converCharToInt(char[]ca){

intlen=ca.length;

int[]iArr=newint[len];

try{

for(inti=0;i

iArr[i]=Integer.parseInt(String.valueOf(ca[i]));

}

}catch(NumberFormatExceptione){

e.printStackTrace();

}

returniArr;

}

/**

*将身份证的每位和对应位的加权因子相乘之后,再得到和值

*

*@paramiArr

*@return身份证编码。

*/

publicstaticintgetPowerSum(int[]iArr){

intiSum=0;

if(power.length==iArr.length){

for(inti=0;i

for(intj=0;j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1