Java身份证处理方法(15转18,出生日期隐藏)

只有第一代身份证是15位,后面的身份证都是18位数字
15位身份证:地址码+出生日期码(2位年)+顺序码
18位身份证:地址码+出生日期码(4位年)+顺序码+校验码
地址码:当地的行政区划代码,6位
出生日期码:即出生年月日
顺序码:同一地址码的区域内,对同年同月同日生的人进行编号,奇数为男性,偶数为女性
校验码:通过算法计算得出。
校验方法
1.将前17位数字分别乘以不同的系数,这个系数数组如下:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2
2.将这17位数字和系数相乘的结果相加,加出来的和除以11,看余数是多少
3.余数只有可能在0-1-2-3-4-5-6-7-8-9-10这11个数字之间,分别对应的校验码是1-0-X-9-8-7-6-5-4-3-2
即如果余数为0,身份证校验码就是1,余数为2就是X
然后就上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
//计算校验码
public
char
getVerifyCode
(String idCard)
{
if
(idCard ==
null
|| idCard.length()<
) {
return
;
}
char
[] ai = idCard.toCharArray();
int
[] wi = {
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
};
char
[] verifyCode = {
'1'
,
'0'
,
'X'
,
'9'
,
'8'
,
'7'
,
'6'
,
'5'
,
'4'
,
'3'
};
int
s
=
;
int
y;
for
(
int
i=
; i<wi.length; i++) {
s+=(ai[i]-
'0'
)*wi[i];
}
y = s %
;
return
verifyCode[y];
}
//转换为18位
public
String
getNewIdCard
(String oldCard)
{
StringBuilder sb;
if
(oldCard !=
null
&& oldCard.length() ==
) {
sb =
new
StringBuilder
();
sb.append(oldCard.substring(
,
)).append(
"19"
).append(oldCard.substring(
));
sb.append(getVerifyCode(sb.toString()));
return
sb.toString();
}
else
{
return
""
;
}
}

隐藏出生日期,用*代替

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public
String
getBrithdayByxx
(String idCard)
{
Srting
newCard
=
""
;
if
(idCard !=
null
){
if
(idCard.length ==
){
newCard = idCard.substring(
,
)+
"********"
+idCard.substring(
,
);
}
else
if
(){
newCard = idCard.substring(
,
)+
"******"
+idCard.substring(
,
);
}
}
return
newCard;
}

Java身份证处理方法(15转18,出生日期隐藏)
https://zhouyinglin.top/2022/08/06/Java身份证处理方法(15转18,出生日期隐藏)/
作者
小周
发布于
2022年8月6日
许可协议