身份证号正则校验(js校验+JAVA校验)
js校验身份证号【15位和18位】
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|
[javascript] view plaincopyprint? function scCard(){ var scType=document.getElementById( "sc_card_type" ).value; if (scType== "1" ){ var scCard=document.getElementById( "sc_card_num" ).value; if (scCard.length!= 0 ){ if (!checkCard(scCard)){ $( "#errorTips" ).html( "身份证号码格式错误" ); } else { $( "#errorTips" ).html( "" ); } } } return false ; } //function checkidno(obj) { var vcity={ 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 : "国外" }; checkCard = function(obj) { //var card = document.getElementById('card_no').value; //是否为空 // if(card === '') // { // return false; //} //校验长度,类型 if (isCardNo(obj) === false ) { return false ; } //检查省份 if (checkProvince(obj) === false ) { return false ; } //校验生日 if (checkBirthday(obj) === false ) { return false ; } //检验位的检测 if (checkParity(obj) === false ) { return false ; } return true ; }; //检查号码是否符合规范,包括长度,类型 isCardNo = function(obj) { //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{ 15 }$)|(^\d{ 17 }(\d|X)$)/; if (reg.test(obj) === false ) { return false ; } return true ; }; //取身份证前两位,校验省份 checkProvince = function(obj) { var province = obj.substr( 0 , 2 ); if (vcity[province] == undefined) { return false ; } return true ; }; //检查生日是否正确 checkBirthday = function(obj) { var len = obj.length; //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字 if (len == '15' ) { var re_fifteen = /^(\d{ 6 })(\d{ 2 })(\d{ 2 })(\d{ 2 })(\d{ 3 })$/; var arr_data = obj.match(re_fifteen); var year = arr_data[ 2 ]; var month = arr_data[ 3 ]; var day = arr_data[ 4 ]; var birthday = new Date( '19' +year+ '/' +month+ '/' +day); return verifyBirthday( '19' +year,month,day,birthday); } //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X if (len == '18' ) { var re_eighteen = /^(\d{ 6 })(\d{ 4 })(\d{ 2 })(\d{ 2 })(\d{ 3 })([ 0 - 9 ]|X)$/; var arr_data = obj.match(re_eighteen); var year = arr_data[ 2 ]; var month = arr_data[ 3 ]; var day = arr_data[ 4 ]; var birthday = new Date(year+ '/' +month+ '/' +day); return verifyBirthday(year,month,day,birthday); } return false ; }; //校验日期 verifyBirthday = function(year,month,day,birthday) { var now = new Date(); var now_year = now.getFullYear(); //年月日是否合理 if (birthday.getFullYear() == year && (birthday.getMonth() + 1 ) == month && birthday.getDate() == day) { //判断年份的范围(3岁到100岁之间) var time = now_year - year; if (time >= 0 && time <= 130 ) { return true ; } return false ; } return false ; }; //校验位的检测 checkParity = function(obj) { //15位转18位 obj = changeFivteenToEighteen(obj); var len = obj.length; if (len == '18' ) { var arrInt = new Array( 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 , 6 , 3 , 7 , 9 , 10 , 5 , 8 , 4 , 2 ); var arrCh = new Array( '1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2' ); var cardTemp = 0 , i, valnum; for (i = 0 ; i < 17 ; i ++) { cardTemp += obj.substr(i, 1 ) * arrInt[i]; } valnum = arrCh[cardTemp % 11 ]; if (valnum == obj.substr( 17 , 1 )) { return true ; } return false ; } return false ; }; //15位转18位身份证号 changeFivteenToEighteen = function(obj) { if (obj.length == '15' ) { var arrInt = new Array( 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 , 6 , 3 , 7 , 9 , 10 , 5 , 8 , 4 , 2 ); var arrCh = new Array( '1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2' ); var cardTemp = 0 , i; obj = obj.substr( 0 , 6 ) + '19' + obj.substr( 6 , obj.length - 6 ); for (i = 0 ; i < 17 ; i ++) { cardTemp += obj.substr(i, 1 ) * arrInt[i]; } obj += arrCh[cardTemp % 11 ]; return obj; } return obj; }; |
JAVA校验
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
package com.ebiz.base.utils; import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import com.ebiz.base.consts.BaseConst; import com.ebiz.base.consts.ConfigConst; import com.ebiz.base.consts.ExceptionConst; import com.ebiz.framework.util.date.DateUtil; import com.ebiz.framework.util.date.DateValidate; import com.ebiz.framework.util.validate.ValidateUtil; import com.ebiz.persistence.laputa.FndPageRule; import com.hp.hpl.sparta.ParseException; public class CheckIdentificationUtil { public static void main(String[] args) { System.out.println(idCardValidate( "370802940221002" )); } /**功能 18位 身份证的校验 * @param idStr * @return ParseException 1001 * @throws Exception * @throws ParseException * @throws NumberFormatException * @throws java.text.ParseException * @author wangming */ public static String idCardValidate(String idStr) { if (idStr == null || ( idStr.length() != 15 && idStr.length() != 18 )) { return BaseConst.PUBLIC_RESPONSE_FAIL; } if ( idStr.length() == 15 ){ StringBuilder sb = new StringBuilder(); sb.append(idStr.substring( 0 , 6 )) .append( "19" ) .append(idStr.substring( 6 )); try { sb.append(getVerifyCode(sb.toString())); idStr = sb.toString(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(sb); } String errorInfo = "" ; // 记录错误信息 //取模映射 String[] valCodeArr = { "1" , "0" , "X" , "9" , "8" , "7" , "6" , "5" , "4" , "3" , "2" }; //加权 String[] wi = { "7" , "9" , "10" , "5" , "8" , "4" , "2" , "1" , "6" , "3" , "7" , "9" , "10" , "5" , "8" , "4" , "2" }; String ai =idStr.substring( 0 , 17 ); if (ValidateUtil.isDigit(ai) == false ) { errorInfo = ExceptionConst.PAXINFO_CARD_ISNOTNUM; return errorInfo; } // ================ 出生年月是否有效 ================ String strYear = ai.substring( 6 , 10 ); // 年份 String strMonth = ai.substring( 10 , 12 ); // 月份 String strDay = ai.substring( 12 , 14 ); // 月份 if (DateValidate.isStrDate(ai.substring( 6 , 14 ))== false ) { errorInfo = ExceptionConst.PAXINFO_CARD_BIRTHDAY_OVER; //"身份证生日无效。"; return errorInfo; } GregorianCalendar gc = new GregorianCalendar(); SimpleDateFormat s = new SimpleDateFormat( "yyyy-MM-dd" ); Date limitDate=DateUtil.getIntervalDate( new Date(),DateUtil.BEFORE, "150Y" ); Date dd = null ; try { dd = s.parse(strYear + "-" + strMonth + "-" + strDay); } catch (java.text.ParseException e) { //类型转换异常 errorInfo = "ParseException" ; return errorInfo; } if (DateValidate.isDateBefore(dd,limitDate)) { errorInfo = ExceptionConst.PAXINFO_CARD_BIRTHDAY_OVER; //"身份证生日不在有效范围。"; return errorInfo; } // ================ 地区码是否有效 ================ if (ConfigConst.CARD_AREA_CODE.indexOf(ai.substring( 0 , 2 ))< 0 ) { errorInfo = ExceptionConst.PAXINFO_CARD_AREA_OVER; //"身份证地区编码错误"; return errorInfo; } // ================ 判断最后一位的值是否符合校验规则 ================ int totalmulAiWi = 0 ; for ( int i = 0 ; i < 17 ; i++) { totalmulAiWi = totalmulAiWi+ Integer.parseInt(String.valueOf(ai.charAt(i)))* Integer.parseInt(wi[i]); } int modValue = totalmulAiWi % 11 ; //映射 String strVerifyCode = valCodeArr[modValue]; ai = ai + strVerifyCode; //x的校验忽略末尾的大小写 if (ai.equalsIgnoreCase(idStr) == false ) { errorInfo = ExceptionConst.PAXINFO_CARD_LAST_OVER; //"身份证无效,不是合法的身份证号码"; return errorInfo; } return BaseConst.PUBLIC_RESPONSE_SUCCESS; } /** * 将已经加上年份的15位身份证,按照规则由17位推算出第18位 * @param idCardNumber * @return */ public static char getVerifyCode(String idCardNumber) { char [] Ai = idCardNumber.toCharArray(); int [] Wi = { 7 , 9 , 10 , 5 , 8 , 4 , 2 , 1 , 6 , 3 , 7 , 9 , 10 , 5 , 8 , 4 , 2 }; char [] verifyCode = { '1' , '0' , 'X' , '9' , '8' , '7' , '6' , '5' , '4' , '3' , '2' }; int S = 0 ; int Y; for ( int i = 0 ; i < Wi.length; i++){ S += (Ai[i] - '0' ) * Wi[i]; } Y = S % 11 ; return verifyCode[Y]; } } |
身份证号正则校验(js校验+JAVA校验)的更多相关文章
- 身份证校验,前台js校验,后台java校验
js校验: var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内 ...
- java中身份证号和的银行卡的深度校验
一: 身份证号: package com.mobile.utils; import java.text.SimpleDateFormat; import java.util.Calendar; imp ...
- 微信小程序常用表单校验方法(手机号校验、身份证号(严格和非严格校验、验证码六位数字校验))
util.js function isPhone(value) { if (!/^1(3|4|5|7|8)\d{9}$/.test(value)) { return false } else { re ...
- Java中校验身份证号合法性(真伪),获取出生日期、年龄、性别、籍贯
开发过程中有用的身份证号的业务场景,那么校验身份证的合法性就很重要了,另外还有通过身份证获取出生日期.年龄.性别.籍贯等信息, 下面是本人在开发中用到的关于校验身份证真伪的工具类,可以直接拿来使用,非 ...
- js验证真实姓名与身份证号,手机号
最近的项目中用的需要调用实名认证的接口,实名认证接口价格相比短信而言高了不是几分钱,所以说调用实名认证的条件就要严格把关,因此用到js验证真实姓名与js验证身份证号. 进入正题 1.js验证真实姓名 ...
- javascript实现验证身份证号的有效性并提示
javascript实现验证身份证号的有效性并提示 function nunber(allowancePersonValue){ if(allowancePersonValue=="身份证号 ...
- 最全,可直接用的一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等。
一些正则校验,判断邮箱,手机号码,车牌号,身份证号,网址,账号,密码,ip,去掉html格式,工商税号等. // 判断邮箱 isValid = [text isValidEmail]; // 判断手机 ...
- JS校验身份证号的合法性
前端表单中有身份证号的校验,下边是用JS来校验身份证号的合法性. 中国居民身份证号码编码规则 第一.二位表示省(自治区.直辖市.特别行政区). 第三.四位表示市(地级市.自治州.盟及国家直辖市所属市辖 ...
- 身份证真实性校验js、mini ui身份证长度正则验证
身份证号码真实性校验 <input type="text" value="请输入身份证号" id="cards" ><bu ...
随机推荐
- C++函数返回值与引用
对于函数的返回值,看似简单,但并非如此,比如: int func(int a);该函数会返回一个int型,如果进行一个调用int result=func(3);会发生什么情况? 首先,func将返回值 ...
- 我叫mt3.2更新公告
1.增加装备合成功能 可以用材料将现有的75级紫装升级为80级紫装. 2.增加全新公会副本 增加新的公会副本:神庙外围.掉落可以进阶装备的材料. 3.增加全新个人副本 增加新的个人副本:奴隶市场. 4 ...
- [Xcode 实际操作]九、实用进阶-(19)重写父类的绘图方法,使用图形上下文绘制自定义图形
目录:[Swift]Xcode实际操作 本文将演示如何使用图形上下文,绘制自定义图形. 使用快捷键[Command]+[N]创建一个新的类文件. (在项目文件夹[DemoApp]上点击鼠标右键[New ...
- Promise对象深入理解
目录 基本用法 返回另一个 Promise 实例 Promise.prototypeof.then Promise.prototype.catch Promise.prototype.finally ...
- jmeter beanshell处理请求响应结果时Unicode编码转为中文
在Test Plan下创建一个后置BeanShell PostProcessor,粘贴如下代码即可: String s=new String(prev.getResponseData()," ...
- scrapy框架中Spiders用法
scrapy框架中Spiders用法 Spider类定义了如何爬去某个网站,包括爬取的动作以及如何从网页内容中提取结构化的数据 总的来说spider就是定义爬取的动作以及分析某个网页 工作流程分析 以 ...
- scrapy框架中选择器的用法
scrapy框架中选择器的用法 Scrapy提取数据有自己的一套机制,被称作选择器(selectors),通过特定的Xpath或者CSS表达式来选择HTML文件的某个部分Xpath是专门在XML文件中 ...
- IIS7文件无法下载问题处理
使用IIS建立了静态站点,内部放置了一些文件供内部局域网下载使用,但deb等文件格式无法下载. 解决办法: 1.在IIS管理器中点击站点,选择右侧的MIME类型. 2.在MIME类型中添加需要下载文件 ...
- 蜥蜴-DInic
题目背景 07四川省选 题目描述 在一个r行c列的网格地图中有一些高度不同的石柱,一些石柱上站着一些蜥蜴,你的任务是让尽量多的蜥蜴逃到边界外. 每行每列中相邻石柱的距离为1,蜥蜴的跳跃距离是d,即蜥蜴 ...
- dubbo源码阅读之集群(故障处理策略)
dubbo集群概述 dubbo集群功能的切入点在ReferenceConfig.createProxy方法以及Protocol.refer方法中. 在ReferenceConfig.createPro ...