Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
X
xzxt-api-report
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
雷紫添
xzxt-api-report
Commits
9bbbab2e
Commit
9bbbab2e
authored
Sep 05, 2019
by
liu_xiaoxu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
身份证号码校验工具类
parent
4278aa0a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
156 additions
and
0 deletions
+156
-0
src/main/java/com/founder/common/IdentityCardVerification.java
+156
-0
No files found.
src/main/java/com/founder/common/IdentityCardVerification.java
0 → 100644
View file @
9bbbab2e
package
com
.
founder
.
common
;
import
org.springframework.stereotype.Component
;
import
java.text.SimpleDateFormat
;
import
java.util.Calendar
;
import
java.util.GregorianCalendar
;
import
java.util.Hashtable
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
@Component
public
class
IdentityCardVerification
{
/* @Test
public void test(){
System.out.println(IdentityCardVerification("110101199003074370"));
}*/
public
static
void
main
(
String
[]
args
)
{
System
.
out
.
println
(
IdentityCardVerification
(
"152105199609301229"
));
}
/**
*身份证验证
* @param idStr
* @return
*/
public
static
String
IdentityCardVerification
(
String
idStr
){
String
[]
wf
=
{
"1"
,
"0"
,
"x"
,
"9"
,
"8"
,
"7"
,
"6"
,
"5"
,
"4"
,
"3"
,
"2"
};
String
[]
checkCode
=
{
"7"
,
"9"
,
"10"
,
"5"
,
"8"
,
"4"
,
"2"
,
"1"
,
"6"
,
"3"
,
"7"
,
"9"
,
"10"
,
"5"
,
"8"
,
"4"
,
"2"
};
String
iDCardNo
=
""
;
try
{
//判断号码的长度 15位或18位
if
(
idStr
.
length
()
!=
18
)
{
return
"身份证号码长度应该为15位或18位"
;
}
if
(
idStr
.
length
()
==
18
)
{
iDCardNo
=
idStr
.
substring
(
0
,
17
);
}
else
if
(
idStr
.
length
()
==
15
)
{
iDCardNo
=
idStr
.
substring
(
0
,
6
)
+
"19"
+
idStr
.
substring
(
6
,
15
);
}
if
(
isStrNum
(
iDCardNo
)
==
false
)
{
return
"身份证15位号码都应为数字;18位号码除最后一位外,都应为数字"
;
}
//判断出生年月
String
strYear
=
iDCardNo
.
substring
(
6
,
10
);
// 年份
String
strMonth
=
iDCardNo
.
substring
(
10
,
12
);
// 月份
String
strDay
=
iDCardNo
.
substring
(
12
,
14
);
// 月份
if
(
isStrDate
(
strYear
+
"-"
+
strMonth
+
"-"
+
strDay
)
==
false
)
{
return
"身份证生日无效"
;
}
GregorianCalendar
gc
=
new
GregorianCalendar
();
SimpleDateFormat
s
=
new
SimpleDateFormat
(
"yyyy-MM-dd"
);
if
((
gc
.
get
(
Calendar
.
YEAR
)
-
Integer
.
parseInt
(
strYear
))
>
150
||
(
gc
.
getTime
().
getTime
()
-
s
.
parse
(
strYear
+
"-"
+
strMonth
+
"-"
+
strDay
).
getTime
())
<
0
)
{
return
"身份证生日不在有效范围"
;
}
if
(
Integer
.
parseInt
(
strMonth
)
>
12
||
Integer
.
parseInt
(
strMonth
)
==
0
)
{
return
"身份证月份无效"
;
}
if
(
Integer
.
parseInt
(
strDay
)
>
31
||
Integer
.
parseInt
(
strDay
)
==
0
)
{
return
"身份证日期无效"
;
}
//判断地区码
Hashtable
h
=
GetAreaCode
();
if
(
h
.
get
(
iDCardNo
.
substring
(
0
,
2
))
==
null
)
{
return
"身份证地区编码错误"
;
}
//判断最后一位
int
theLastOne
=
0
;
for
(
int
i
=
0
;
i
<
17
;
i
++)
{
theLastOne
=
theLastOne
+
Integer
.
parseInt
(
String
.
valueOf
(
iDCardNo
.
charAt
(
i
)))
*
Integer
.
parseInt
(
checkCode
[
i
]);
}
int
modValue
=
theLastOne
%
11
;
String
strVerifyCode
=
wf
[
modValue
];
iDCardNo
=
iDCardNo
+
strVerifyCode
;
if
(
idStr
.
length
()
==
18
&&!
iDCardNo
.
equals
(
idStr
))
{
return
"身份证无效,不是合法的身份证号码"
;
}
}
catch
(
Exception
e
){
e
.
printStackTrace
();
}
return
idStr
;
}
/**
* 地区代码
* @return Hashtable
*/
private
static
Hashtable
GetAreaCode
()
{
Hashtable
hashtable
=
new
Hashtable
();
hashtable
.
put
(
"11"
,
"北京"
);
hashtable
.
put
(
"12"
,
"天津"
);
hashtable
.
put
(
"13"
,
"河北"
);
hashtable
.
put
(
"14"
,
"山西"
);
hashtable
.
put
(
"15"
,
"内蒙古"
);
hashtable
.
put
(
"21"
,
"辽宁"
);
hashtable
.
put
(
"22"
,
"吉林"
);
hashtable
.
put
(
"23"
,
"黑龙江"
);
hashtable
.
put
(
"31"
,
"上海"
);
hashtable
.
put
(
"32"
,
"江苏"
);
hashtable
.
put
(
"33"
,
"浙江"
);
hashtable
.
put
(
"34"
,
"安徽"
);
hashtable
.
put
(
"35"
,
"福建"
);
hashtable
.
put
(
"36"
,
"江西"
);
hashtable
.
put
(
"37"
,
"山东"
);
hashtable
.
put
(
"41"
,
"河南"
);
hashtable
.
put
(
"42"
,
"湖北"
);
hashtable
.
put
(
"43"
,
"湖南"
);
hashtable
.
put
(
"44"
,
"广东"
);
hashtable
.
put
(
"45"
,
"广西"
);
hashtable
.
put
(
"46"
,
"海南"
);
hashtable
.
put
(
"50"
,
"重庆"
);
hashtable
.
put
(
"51"
,
"四川"
);
hashtable
.
put
(
"52"
,
"贵州"
);
hashtable
.
put
(
"53"
,
"云南"
);
hashtable
.
put
(
"54"
,
"西藏"
);
hashtable
.
put
(
"61"
,
"陕西"
);
hashtable
.
put
(
"62"
,
"甘肃"
);
hashtable
.
put
(
"63"
,
"青海"
);
hashtable
.
put
(
"64"
,
"宁夏"
);
hashtable
.
put
(
"65"
,
"新疆"
);
hashtable
.
put
(
"71"
,
"台湾"
);
hashtable
.
put
(
"81"
,
"香港"
);
hashtable
.
put
(
"82"
,
"澳门"
);
hashtable
.
put
(
"91"
,
"国外"
);
return
hashtable
;
}
/**
* 判断字符串是否为数字
* @param str
* @return
*/
private
static
boolean
isStrNum
(
String
str
)
{
Pattern
pattern
=
Pattern
.
compile
(
"[0-9]*"
);
Matcher
isNum
=
pattern
.
matcher
(
str
);
if
(
isNum
.
matches
())
{
return
true
;
}
else
{
return
false
;
}
}
/**
* 判断字符串是否为日期格式
* @param strDate
* @return
*/
public
static
boolean
isStrDate
(
String
strDate
)
{
Pattern
pattern
=
Pattern
.
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])))))?$"
);
Matcher
m
=
pattern
.
matcher
(
strDate
);
if
(
m
.
matches
())
{
return
true
;
}
else
{
return
false
;
}
}
}
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment