您现在的位置:首页 >> JS&Jq >> 内容

js验证身份证

时间:2015-7-31 15:46:03 点击:

  核心提示:在页面中通过js验证身份证合法性,一般是通过正则表达式或工具类进行判断。下面是项目中验证身份证的合法性代码实现。第一种:通过正则表达式进行简单校验。?12345678code class='hljs'...

在页面中通过js验证身份证合法性,一般是通过正则表达式或工具类进行判断。下面是项目中验证身份证的合法性代码实现。
第一种:通过正则表达式进行简单校验。

?
1
2
3
4
5
6
7
8
<code class="hljs" mel="">if ($(#cardType).val() == 01) {
    var _cardNo = /(^d{15}$)|(^d{18}$)|(^d{17}(d|X|x)$)/;
    if (!_cardNo.test(cardNo_val)) {
        $(#showerror).css(color, #ff0000);
        $(#showerror).text(身份证号码格式 不正确!);
        return false;
    }
}</code>

第二种是通过js工具类进行判断,工具类代码如下:

?
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
179
180
181
182
183
184
185
186
187
188
189
<code class="hljs" javascript="">/* 简单身份证验证脚本
 *var ck=new Qhjsw.IDChecks(身份证号码);
 *var tip=ck.IDCk();
 *tip为一个对象(object)总共存在7个属性
 *msg 返回提示信息,无论是否通过验证均有此属性。例如:身份证格式错误、效验位错误
 *pass 返回bool值, 无论是否通过验证均有此属性。值为true代表通过,false代表验证失败
 *idcode 身份证号码,验证通过存在
 *address 地址(只限省份信息),验证通过存在
 *sextag  性别标识,通过验证存在。0为女,1为男
 *sex     返回性别为中文。男或女
 *birthday 返回出生日期 18位身份证返回字符格式为YYYY-MM-DD 15位返回格式为YY-MM-DD 例如:1991-01-01(18位)、91-01-01(15位号码)
 *
 *
 *顺序类编码,无法确定,奇数为男,偶数为女  
 *校验码,该位数值可通过前17位计算获得 
 * 18位号码加权因子为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ] 
 * 验证位 Y = [ 1, 0,'X' , 9, 8, 7, 6, 5, 4, 3, 2 ]  
 * 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )  
 */
var Qhjsw = {};
Qhjsw.IDChecks = function(Code) {
    var city = {
        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 : 国外
    };
    var Tip = {}; // 创建一个空对象,此对象用来返回验证结果
    var IDCode = Code;
    var code = []; // 创建一个空数组,用来保存被分割的身份证
    var sextable = [女, 男]; // 创建数组,保存性别。表驱动
    var Ck = function(IDCode) {
        if (!IDCode || !/(^[1-9]d{7}((0d)|(1[0-2]))(([0|1|2]d)|3[0-1])d{3}$)|(^d{6}(18|19|20){1}d{2}(0[1-9]|1[012])(0[1-9]|[12]d|3[01])d{3}(d|X|x)$)/i.test(IDCode)) {
            Tip.msg = 身份证号格式错误;
            Tip.pass = false;
        } else if (!city[IDCode.substr(0, 2)]) {
            Tip.msg = 地址编码错误;
            Tip.pass = false;
        } else if (!_CheckBirthday(IDCode)) {
            Tip.msg = 身份证中出生日期不正确;
            Tip.pass = false;
        } else {
 
            if (18 == IDCode.length) {
                code = IDCode.split('');
                var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
                var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
                var sum = 0;
                var ai = 0;
                var wi = 0;
                if (typeof code[17] == string) {
                    code[17] = code[17].toUpperCase();
                }
                for (var i = 0; i < 17; i++) {
                    ai = code[i];
                    wi = factor[i];
                    sum += ai * wi;
                }
                if (parity[sum % 11] != code[17]) {
                    Tip.msg = 身份证号格式错误;
                    Tip.pass = false;
                } else {
                    Tip.msg = 该身份证验证正确;
                    Tip.pass = true;
                    Tip.idcode = IDCode;
                    Tip.address = city[IDCode.substr(0, 2)];
                    Tip.sextag = _GetSex(IDCode);
                    Tip.sex = sextable[Tip.sextag];
                    Tip.birthday = _GetBirthday(IDCode);
                    Tip.age = _GetAge(Tip.birthday);
 
                }
            } else {
                Tip.msg = 该身份证验证正确;
                Tip.pass = true;
                Tip.idcode = IDCode;
                Tip.address = city[IDCode.substr(0, 2)];
                Tip.sextag = _GetSex(IDCode);
                Tip.sex = sextable[Tip.sextag];
                Tip.birthday = _GetBirthday(IDCode);
                Tip.age = _GetAge(Tip.birthday);
            }
        }
    };
    this.IDCk = function() {
        Ck(IDCode);
        return Tip;
    };
    function _CheckBirthday(IDCodes) {
        if (IDCodes.length == 18) {
            var year = IDCodes.substring(6, 10);
            var month = IDCodes.substring(10, 12);
            var day = IDCodes.substring(12, 14);
            var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
            // 这里用getFullYear()获取年份,避免千年虫问题
            if (temp_date.getFullYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {
                return false;
            } else {
                return true;
            }
        } else {
            var year = IDCodes.substring(6, 8);
            var month = IDCodes.substring(8, 10);
            var day = IDCodes.substring(10, 12);
            var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
            // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法
            if (temp_date.getYear() != parseFloat(year) || temp_date.getMonth() != parseFloat(month) - 1 || temp_date.getDate() != parseFloat(day)) {
                return false;
            } else {
                return true;
            }
        }
    }
    function _GetBirthday(IDCodes) {
        if (IDCodes.length == 18) {
            var year = IDCodes.substring(6, 10);
            var month = IDCodes.substring(10, 12);
            var day = IDCodes.substring(12, 14);
            return year + - + month + - + day;
        } else {
            var year = IDCodes.substring(6, 8);
            var month = IDCodes.substring(8, 10);
            var day = IDCodes.substring(10, 12);
            return year + - + month + - + day;
 
        }
    }
    function _GetSex(IDCodes) {
        if (IDCodes.length == 18) {
            if (IDCodes.substring(14, 17) % 2 == 0) {
                return 0;
            } else {
                return 1;
            }
        } else {
            if (IDCodes.substring(14, 15) % 2 == 0) {
                return 0;
            } else {
                return 1;
            }
        }
    }
 
    function _GetAge(bdate) {
        if (bdate != ) {
            var cd = new Date();
            var age = cd.getFullYear() - parseInt(bdate.substring(0, 4));
            var var_age = 0;
            if (cd.getMonth() >= parseInt(bdate.substring(5, 7))) {
                var_age = age;
            } else {
                var_age = age - 1;
            }
            return (var_age < 0 ? 0 : var_age);
        }
    }
 
};</code>

将工具类引入jsp文件,使用方法如下:

?
1
2
3
4
5
6
7
8
9
<code class="hljs" javascript="">if ($(#cardType).val() == 01) {
    var ck = new Qhjsw.IDChecks(cardNo_val);
    var tip = ck.IDCk();
    if (!tip.pass) {
        $(#showerror).css(color, #ff0000);
        $(#showerror).text(身份证号码格式 不正确!);
        return false;
    }
}</code>

 

作者:不详 来源:网络
共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 青春网络编程技术(www.qcfupo.com) © 2020 版权所有 All Rights Reserved.
  • Powered by qcfupo! V3.0sp1
  • 百度友情链接: 百家乐[www.chinawestnews.net/aomenbaijiale/] 赌博网[www.chinawestnews.net/amdbwz/] 海立方[www.bjl.gov.cn/bjgylc/] 娱乐城[www.gtxrmzf.gov.cn/mapai/] 娱乐城[www.hfsf.gov.cn/yfgj/] 威尼斯人[www.hllinkou.gov.cn/baijile/] 澳门威尼斯[www.jjwgj.gov.cn/wnsr/] 888真人[www.lagm.gov.cn/888zhenren/] 百乐坊[www.laoling.gov.cn/blfylc/] 现金网[www.longyu.gov.cn/xjw/] 百家乐[www.chinawestnews.net/ambjl/] 新葡京娱乐场[www.sjzedu.gov.cn/jsylc/] 时时彩[www.snjw.gov.cn/ssc/] 赌博[www.chinawestnews.net/aomendubo/]