身份证号码18位与15位转换Word文件下载.docx
- 文档编号:18405969
- 上传时间:2022-12-16
- 格式:DOCX
- 页数:21
- 大小:19.42KB
身份证号码18位与15位转换Word文件下载.docx
《身份证号码18位与15位转换Word文件下载.docx》由会员分享,可在线阅读,更多相关《身份证号码18位与15位转换Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
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;
publicstaticMap<
String,String>
cityCodes=newHashMap<
();
/**台湾身份首字母对应数字*/
String,Integer>
twFirstCode=newHashMap<
/**香港身份首字母对应数字*/
hkFirstCode=newHashMap<
static{
cityCodes.put("
北京"
);
天津"
河北"
山西"
内蒙古"
辽宁"
吉林"
黑龙江"
上海"
江苏"
浙江"
安徽"
福建"
江西"
山东"
河南"
湖北"
湖南"
广东"
广西"
海南"
重庆"
四川"
贵州"
云南"
西藏"
陕西"
甘肃"
青海"
宁夏"
新疆"
台湾"
香港"
澳门"
国外"
twFirstCode.put("
A"
10);
B"
11);
C"
12);
D"
13);
E"
14);
F"
15);
G"
16);
H"
17);
J"
18);
K"
19);
L"
20);
M"
21);
N"
22);
P"
23);
Q"
24);
R"
25);
S"
26);
T"
27);
U"
28);
V"
29);
30);
Y"
31);
W"
32);
Z"
33);
I"
34);
O"
35);
hkFirstCode.put("
1);
2);
3);
}
/**
*将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{
returnidCard18;
*将18位身份证号码转换为15位
*18位身份编码
*@return15位身份编码
publicstaticStringconver18CardTo15(StringidCard){
StringidCard15="
=CHINA_ID_MAX_LENGTH){
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)){
String[]cardval=validateIdCard10(card);
if(cardval!
if(cardval[2].equals("
true"
)){
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();
Stringval=getCheckCode18(iSum17);
if(val.length()>
if(val.equalsIgnoreCase(code18)){
bTrue=true;
returnbTrue;
*验证15位身份编码是否合法
*身份编码
publicstaticbooleanvalidateIdCard15(StringidCard){
StringproCode=idCard.substring(0,2);
if(cityCodes.get(proCode)==null){
StringbirthCode=idCard.substring(6,12);
yy"
).parse(birthCode.substring(0,2));
if(!
valiDate(cal.get(Calendar.YEAR),Integer.valueOf(birthCode.substring(2,4)),
Integer.valueOf(birthCode.substring(4,6)))){
*验证10位身份编码是否合法
*@return身份证信息数组
*<
p>
*[0]-台湾、澳门、香港[1]-性别(男M,女F,未知N)[2]-是否合法(合法true,不合法false)
*若不是身份证件号码则返回null
/p>
publicstaticString[]validateIdCard10(StringidCard){
String[]info=newString[3];
Stringcard=idCard.replaceAll("
[\\(|\\)]"
if(card.length()!
=8&
&
card.length()!
=9&
idCard.length()!
=10){
if(idCard.matches("
^[a-zA-Z][0-9]{9}$"
)){//台湾
info[0]="
11111"
Stringchar2=idCard.substring(1,2);
if(char2.equals("
info[1]="
MMMMMMM"
}elseif(char2.equals("
FFFFFFF"
info[2]="
false"
NNNN"
returninfo;
info[2]=validateTWCard(idCard)?
:
}elseif(idCard.matches("
^[1|5|7][0-9]{6}\\(?
[0-9A-Z]\\)?
$"
)){//澳门
//TODO
^[A-Z]{1,2}[0-9]{6}\\(?
[0-9A]\\)?
)){//香港
info[2]=validateHKCard(idCard)?
*验证台湾身份证号码
*身份证号码
*@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的数字加上字符"
,"
代表10
*将身份证号码全部转换为数字,分别对应乘9-1相加的总和,整除11则证件号码有效
*@paramidCard身份证号码
publicstaticbooleanvalidateHKCard(StringidCard){
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);
sum=522+(Integer.valueOf(card.substring(0,1).toUpperCase().toCharArray()[0])-55)*8;
Stringmid=card.substring(1,7);
Stringend=card.substring(7,8);
Integeriflag=7;
if(end.toUpperCase().equals("
sum=sum+10;
sum=sum+Integer.valueOf(end);
return(sum%11==0)?
*将字符数组转换成数字数组
*@paramca
*字符数组
*@return数字数组
publicstaticint[]converCharToInt(char[]ca){
intlen=ca.length;
int[]iArr=newint[len];
for(inti=0;
i<
len;
i++){
iArr[i]=Integer.parseInt(String.valueOf(ca[i]));
}catch(NumberFormatExceptione){
returniArr;
*将身份证的每位和对应位的加权因子相乘之后,再得到和值
*@paramiArr
*@return身份证编码。
publicstaticintgetPowerSum(int[]iArr){
intiSum=0;
if(power.length==iArr.length){
iArr.length;
for(intj=0;
j<
power.le
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 身份证号码 18 15 转换