1
.
/**
*********************************身份证验证开始***************************************
*/
2
.
/**
3.*身份证号码验证
4.*1、号码的结构
5.*公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,
6.*八位数字出生日期码,三位数字顺序码和一位数字校验码。
7.*2、地址码(前六位数)
8.*表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
9.*3、出生日期码(第七位至十四位)
10.*表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
11.*4、顺序码(第十五位至十七位)
12.*表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,
13.*顺序码的奇数分配给男性,偶数分配给女性。
14.*5、校验码(第十八位数)
15.*(1)十七位数字本体码加权求和公式S=Sum(Ai*Wi),i=0,
,16,先对前17位数字的权求和
16.*Ai:表示第i位置上的身份证号码数字值Wi:表示第i位置上的加权因子Wi:791058421637910584
17.*2(2)计算模Y=mod(S,11)(3)通过模得到对应的校验码Y:012345678910校验码:10
18.*X98765432
19.
*/
20
.
21
.
/**
22.*功能:身份证的有效验证
23.*
@param
IDStr身份证号
24.*
@return
有效:返回""无效:返回String信息
25.*
@throws
ParseException
26.
*/
27
.@SuppressWarnings(
"
unchecked
"
)
28
.
public
static
StringIDCardValidate(StringIDStr)
throws
ParseException{
29
.StringerrorInfo
=
""
;
//
记录错误信息
30
.String[]ValCodeArr
=
{
"
1
"
,
"
0
"
,
"
x
"
,
"
9
"
,
"
8
"
,
"
7
"
,
"
6
"
,
"
5
"
,
"
4
"
,
31
.
"
3
"
,
"
2
"
};
32
.String[]Wi
=
{
"
7
"
,
"
9
"
,
"
10
"
,
"
5
"
,
"
8
"
,
"
4
"
,
"
2
"
,
"
1
"
,
"
6
"
,
"
3
"
,
"
7
"
,
33
.
"
9
"
,
"
10
"
,
"
5
"
,
"
8
"
,
"
4
"
,
"
2
"
};
34
.StringAi
=
""
;
35
.
//
================号码的长度15位或18位================
36
.
if
(IDStr.length()
!=
15
&&
IDStr.length()
!=
18
){
37
.errorInfo
=
"
身份证号码长度应该为15位或18位。
"
;
38
.
return
errorInfo;
39
.}
40
.
//
=======================(end)========================
41
.
42
.
//
================数字除最后以为都为数字================
43
.
if
(IDStr.length()
==
18
){
44
.Ai
=
IDStr.substring(
0
,
17
);
45
.}
else
if
(IDStr.length()
==
15
){
46
.Ai
=
IDStr.substring(
0
,
6
)
+
"
19
"
+
IDStr.substring(
6
,
15
);
47
.}
48
.
if
(isNumeric(Ai)
==
false
){
49
.errorInfo
=
"
身份证15位号码都应为数字;18位号码除最后一位外,都应为数字。
"
;
50
.
return
errorInfo;
51
.}
52
.
//
=======================(end)========================
53
.
54
.
//
================出生年月是否有效================
55
.StringstrYear
=
Ai.substring(
6
,
10
);
//
年份
56
.StringstrMonth
=
Ai.substring(
10
,
12
);
//
月份
57
.StringstrDay
=
Ai.substring(
12
,
14
);
//
月份
58
.
if
(isDate(strYear
+
"
-
"
+
strMonth
+
"
-
"
+
strDay)
==
false
){
59
.errorInfo
=
"
身份证生日无效。
"
;
60
.
return
errorInfo;
61
.}
62
.GregorianCalendargc
=
new
GregorianCalendar();
63
.SimpleDateFormats
=
new
SimpleDateFormat(
"
yyyy-MM-dd
"
);
64
.
if
((gc.get(Calendar.YEAR)
-
Integer.parseInt(strYear))
>
150
65
.
||
(gc.getTime().getTime()
-
s.parse(
66
.strYear
+
"
-
"
+
strMonth
+
"
-
"
+
strDay).getTime())
<
0
){
67
.errorInfo
=
"
身份证生日不在有效范围。
"
;
68
.
return
errorInfo;
69
.}
70
.
if
(Integer.parseInt(strMonth)
>
12
||
Integer.parseInt(strMonth)
==
0
){
71
.errorInfo
=
"
身份证月份无效
"
;
72
.
return
errorInfo;
73
.}
74
.
if
(Integer.parseInt(strDay)
>
31
||
Integer.parseInt(strDay)
==
0
){
75
.errorInfo
=
"
身份证日期无效
"
;
76
.
return
errorInfo;
77
.}
78
.
//
=====================(end)=====================
79
.
80
.
//
================地区码时候有效================
81
.Hashtableh
=
GetAreaCode();
82
.
if
(h.get(Ai.substring(
0
,
2
))
==
null
){
83
.errorInfo
=
"
身份证地区编码错误。
"
;
84
.
return
errorInfo;
85
.}
86
.
//
==============================================
87
.
88
.
//
================判断最后一位的值================
89
.
int
TotalmulAiWi
=
0
;
90
.
for
(
int
i
=
0
;i
<
17
;i
++
){
91
.TotalmulAiWi
=
TotalmulAiWi
92
.
+
Integer.parseInt(String.valueOf(Ai.charAt(i)))
93
.
*
Integer.parseInt(Wi[i]);
94
.}
95
.
int
modValue
=
TotalmulAiWi
%
11
;
96
.StringstrVerifyCode
=
ValCodeArr[modValue];
97
.Ai
=
Ai
+
strVerifyCode;
98
.
99
.
if
(IDStr.length()
==
18
){
100
.
if
(Ai.equals(IDStr)
==
false
){
101
.errorInfo
=
"
身份证无效,不是合法的身份证号码
"
;
102
.
return
errorInfo;
103
.}
104
.}
else
{
105
.
return
""
;
106
.}
107
.
//
=====================(end)=====================
108
.
return
""
;
109
.}
110
.
111
.
/**
112.*功能:设置地区编码
113.*
@return
Hashtable对象
114.
*/
115
.@SuppressWarnings(
"
unchecked
"
)
116
.
private
static
HashtableGetAreaCode(){
117
.Hashtablehashtable
=
new
Hashtable();
118
.hashtable.put(
"
11
"
,
"
北京
"
);
119
.hashtable.put(
"
12
"
,
"
天津
"
);
120
.hashtable.put(
"
13
"
,
"
河北
"
);
121
.hashtable.put(
"
14
"
,
"
山西
"
);
122
.hashtable.put(
"
15
"
,
"
内蒙古
"
);
123
.hashtable.put(
"
21
"
,
"
辽宁
"
);
124
.hashtable.put(
"
22
"
,
"
吉林
"
);
125
.hashtable.put(
"
23
"
,
"
黑龙江
"
);
126
.hashtable.put(
"
31
"
,
"
上海
"
);
127
.hashtable.put(
"
32
"
,
"
江苏
"
);
128
.hashtable.put(
"
33
"
,
"
浙江
"
);
129
.hashtable.put(
"
34
"
,
"
安徽
"
);
130
.hashtable.put(
"
35
"
,
"
福建
"
);
131
.hashtable.put(
"
36
"
,
"
江西
"
);
132
.hashtable.put(
"
37
"
,
"
山东
"
);
133
.hashtable.put(
"
41
"
,
"
河南
"
);
134
.hashtable.put(
"
42
"
,
"
湖北
"
);
135
.hashtable.put(
"
43
"
,
"
湖南
"
);
136
.hashtable.put(
"
44
"
,
"
广东
"
);
137
.hashtable.put(
"
45
"
,
"
广西
"
);
138
.hashtable.put(
"
46
"
,
"
海南
"
);
139
.hashtable.put(
"
50
"
,
"
重庆
"
);
140
.hashtable.put(
"
51
"
,
"
四川
"
);
141
.hashtable.put(
"
52
"
,
"
贵州
"
);
142
.hashtable.put(
"
53
"
,
"
云南
"
);
143
.hashtable.put(
"
54
"
,
"
西藏
"
);
144
.hashtable.put(
"
61
"
,
"
陕西
"
);
145
.hashtable.put(
"
62
"
,
"
甘肃
"
);
146
.hashtable.put(
"
63
"
,
"
青海
"
);
147
.hashtable.put(
"
64
"
,
"
宁夏
"
);
148
.hashtable.put(
"
65
"
,
"
新疆
"
);
149
.hashtable.put(
"
71
"
,
"
台湾
"
);
150
.hashtable.put(
"
81
"
,
"
香港
"
);
151
.hashtable.put(
"
82
"
,
"
澳门
"
);
152
.hashtable.put(
"
91
"
,
"
国外
"
);
153
.
return
hashtable;
154
.}
155
.
156
.
/**
157.*功能:判断字符串是否为数字
158.*
@param
str
159.*
@return
160.
*/
161
.
private
static
boolean
isNumeric(Stringstr){
162
.Patternpattern
=
Pattern.compile(
"
[0-9]*
"
);
163
.MatcherisNum
=
pattern.matcher(str);
164
.
if
(isNum.matches()){
165
.
return
true
;
166
.}
else
{
167
.
return
false
;
168
.}
169
.}
170
.
171
.
/**
172.*功能:判断字符串是否为日期格式
173.*
@param
str
174.*
@return
175.
*/
176
.
public
static
boolean
isDate(StringstrDate){
177
.Patternpattern
=
Pattern
178
..compile(
"
^((//d{2}(([02468][048])|([13579][26]))[//-/////s]?((((0?[13578])|(1[02]))[//-/////s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[//-/////s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[//-/////s]?((0?[1-9])|([1-2][0-9])))))|(//d{2}(([02468][1235679])|([13579][01345789]))[//-/////s]?((((0?[13578])|(1[02]))[//-/////s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[//-/////s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[//-/////s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(//s(((0?[0-9])|([1-2][0-3]))//:([0-5]?[0-9])((//s)|(//:([0-5]?[0-9])))))?$
"
);
179
.Matcherm
=
pattern.matcher(strDate);
180
.
if
(m.matches()){
181
.
return
true
;
182
.}
else
{
183
.
return
false
;
184
.}
185
.}
186
.
187
.
/**
188.*
@param
args
189.*
@throws
ParseException
190.
*/
191
.
//
publicstaticvoidmain(String[]args)throwsParseException{
192
.
//
//
StringIDCardNum="210102820826411";
193
.
//
//
StringIDCardNum="210102198208264114";
194
.
//
StringIDCardNum="500113198606245216";
195
.
//
CommonUtilcc=newCommonUtil();
196
.
//
System.out.println(cc.IDCardValidate(IDCardNum));
197
.
//
//
System.out.println(cc.isDate("1996-02-29"));
198
.
//
}
199
.
/**
*********************************身份证验证结束***************************************
*/
分享到:
相关推荐
java身份证号验证源代码
Java详细验证身份证实例代码
正中的JAVA源代码程序!public static void main(String[] args) throws IOException{ //输入身份证号码 System.out.println("请输入一个身份证号码:"); BufferedReader br=new BufferedReader(new ...
身份证验证代码java,包括最后一位有效性的验证。身份证验证代码java,包括最后一位有效性的验证。
针对身份证号码的校验,以及能自动将身份证从15位升级为18位
Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验Java校验身份证号码工具类 ---运行几年了,很靠谱。包含15位身份证校验
java身份证验证代码实现,需要的朋友可以参考一下
直接将代码粘贴于测试类,输入身份证号,验证该身份证号是否是有效的身份证号
该系统是身份证验证系统,输入身份证号在联网情况下即可获得相关信息。语言是java。。将代码导入eclipse直接可以运行~
身份证验证及规则,根据规则去书写java代码
腾讯AI身份证识别活体验证实例。。。。
身份证号码查询 身份证验证 身份证性别判断 源码 java 一个通过身份证号码判断任务信息的小软件,java的附带源码
这个代码实现了一个简单的身份证号码验证。首先定义了一个名为IDCardValidator的类,并在main()方法中定义了一个待...由于使用了正则表达式来验证身份证号码的格式,因此可以方便地检查用户输入的身份证号码是否合法。
对身份证号码的复杂逻辑 进行验证, 可讲15位身份证自动转换为18位身份证号码进行验证
一些工具类代码块的标准代码,包括但不限于: 将身份证的每位和对应位的加权因子相乘之后,再得到和值 将power和值与1 1取模...验证身份证是否合法 根据身份编号获取年龄 根据身份编号获取生日 根据身份编号获取生日年
绝对正确的源代码!建立一个熟悉语言环境的类文件(javascript、Java、C#),用于各种输入字符串的科学性验证,要求:包含姓名、学号、身份证号、手机号、电子邮箱
在身份证验证会话Bean作业的基础上,定义一个本地接口,接口中包含查询身份证所在省市、... 在NetBeans中将该EAR项目部署到GlassFish服务器,并通过运行该EAR项目,利用Web页面测试身份证信息的验证和地区显示功能。
对于其它的语言也有不少的身份证验证了,这里的代码效果更简单
在用户注册页面有些需求要求的比较严格,需要对身份证验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。下面就此实现方法给大家讲解下。 很多时候我们都是通过一组正则表达式来判断用户输入的身份证...
JavaScript验证身份证号 <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%> <!DOCTYPE ...