- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章JavaScript正则表达式验证身份证号码是否合法(两种方法)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
第一种方法:
在用户注册页面有些需求要求的比较严格,需要对身份证js验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。下面就此实现方法给大家讲解下.
很多时候我们都是通过一组正则表达式来判断用户输入的身份证是否合法,那在用正则表达式判断之前,你对身份证号的组成有多少了解呢?下面来说说一个身份证号里面包含了多少的信息:
1、号码的结构 。
公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码.
2、地址码(前六位数) 。
表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按gb/T2260的规定执行.
3、出生日期码(第七位至十四位) 。
表示编码对象出生的年、月、日,按gb/T7408的规定执行,年、月、日代码之间不用分隔符.
4、顺序码(第十五位至十七位) 。
表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性.
5、校验码(第十八位数) 。
作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么 此人的身份证就变成了19位。X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准.
在知道身份证号结构组成各部分的意思后,我们开始进入主题:
1、定义一个全国地区的对象 。
var aCity={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:"国外"} 。
2、正则表达式判断 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
function
isCardID(sId){
var
iSum=0 ;
var
info=
""
;
if
(!/^\d{17}(\d|x)$/i.test(sId))
return
"你输入的身份证长度或格式错误"
;
sId=sId.replace(/x$/i,
"a"
);
if
(aCity[parseInt(sId.substr(0,2))]==
null
)
return
"你的身份证地区非法"
;
sBirthday=sId.substr(6,4)+
"-"
+Number(sId.substr(10,2))+
"-"
+Number(sId.substr(12,2));
var
d=
new
Date(sBirthday.replace(/-/g,
"/"
)) ;
if
(sBirthday!=(d.getFullYear()+
"-"
+ (d.getMonth()+1) +
"-"
+ d.getDate()))
return
"身份证上的出生日期非法"
;
for
(
var
i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) ;
if
(iSum%11!=1)
return
"你输入的身份证号非法"
;
//aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女");//此次还可以判断出输入的身份证号的人性别
return
true
;
}
|
第二种方法:
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
|
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;
};
|
。
最后此篇关于JavaScript正则表达式验证身份证号码是否合法(两种方法)的文章就讲到这里了,如果你想了解更多关于JavaScript正则表达式验证身份证号码是否合法(两种方法)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
(注意:这个问题的动机是试图提出预处理器黑客来生成无操作分配来回答另一个问题: Macro that accept new object ...请记住这一点!) 这是一个人为的类: class foo
所以我尝试用java编写一个井字棋游戏。大部分已经完成,但是,如果有人选择了已被占用的空间,我无法返回无效的移动。 这是我试图弄清楚的代码。我认为由于空间是由数字 0 表示的(我的教授告诉我们这一点)
我想使用 Java 代码获取某些 Google 搜索引擎查询(在整个网络上)的估计结果数。 我每天只需要做很少的查询,所以一开始 Google Web Search API ,虽然已被弃用,但似乎已经
C++ Primer, 5e 的练习 4.20 询问表达式 iter++->empty(); 是否成立是合法的。假设iter是 vector::iterator . 这个表达式是合法的。我用gcc编译
C++ Primer, 5e 的练习 4.20 询问表达式 iter++->empty(); 是否成立是合法的。假设iter是 vector::iterator . 这个表达式是合法的。我用gcc编译
在 C++ 中,动态内存(取消)分配(malloc-free/new-delete)显然可以重复获得相同的内存范围,该内存范围被释放并按顺序再次分配。在多线程 C++ 中,这可能发生在多个线程中。 显
AesCryptoServiceProvider.LegalKeySizes 字段显示允许的位大小。 但是我不明白的是,如果这些都是真的,我如何才能成功利用 2048 位 key 长度(256 字节)
我有一个结构: typedef struct _n { int type; union { char *s; int i; }; } n; 当我
这个问题在这里已经有了答案: 关闭10年前. Possible Duplicate: int var = 1; void main() { int i = i; } 以下代码在g++和Visual C
根据 C++03 标准 (5.3.4/7): When the value of the expression in a direct-new-declarator is zero, the allo
我正在尝试创建一个生成器,使用 scalacheck 1.6.6 和规范 1.7 (scala 2.8.1) 生成(非零长度)合法的 unicode 字符串。 我希望我可以创建像这样的生成器: obj
这确实是一个关于 C++ 的问题,而不是 OpenGL。我正在关注 this OpenGL 教程(我刚开始),作者使用 C++(不是 C)。我的问题是 glVertexAttribPointer ta
由于 C++ 别名规则,您不能随意将 (一个 int*) 指向 char 数组,这似乎达成了一些共识。 从另一个问题——Generic char[] based storage and avoidin
我正在寻找一个通过 HTTP 接口(interface)发送文本消息的 SMS 网关。 但是,有些短信网关不允许设置发件人ID,允许的要么要求用户证明发件人ID是自己的手机号码,要么手动检查每个发件人
我们注意到您的应用要求用户注册个人信息才能访问非基于帐户的功能。在允许访问与用户无关的应用内容和功能之前,应用不能要求用户注册。 我们在注册时采用电子邮件 ID,因为所有数据都代表电子邮件 ID 在后
我一直在阅读 Bloch 和 Gafter 的 Java Puzzlers,并读到了第 10 个谜题 (Tweedledee)。这个谜题的本质是 provide declarations for th
这个问题确实符合标题:我很想知道造成这种差异的技术原因是什么,以及基本原理? std::shared_ptr sharedToVoid; // legal; std::unique_ptr uniqu
我试图做的是将数据框数据附加到现有的合法 excel 文件中。我使用了 openpyxl 中的 load_workbook() 函数,但它系统地返回了一个错误。这是一些在我的机器上崩溃的代码: fro
App 多次被 Apple 拒绝 “经过进一步审查,我们仍然发现您的应用使用了后台定位服务,但并未按照 iOS 人机界面指南的要求在位置模式警报中阐明其使用目的。” 在“NSLocationAlway
据我所知,像这样在 C++ 中实例化一个整数是合法的: int x = int(5); 作为一名 Java 程序员,我会假设这行代码调用传递“5”作为参数的整数的构造函数。我读到 int 不是一个类,
我是一名优秀的程序员,十分优秀!