全国身份证及港澳台身份证验证js代码、函数。
js判断输入是否中文,数字,身份证等等js函数

用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"
}else if(c=="-"&&str.length==1){
return false;
}
}else if(c < "0" || c > "9"){
return false;
}
}
return true;
}
/*
英文判断函数,返回true表示是全部英文,返回false表示不全部是英文
return false;
}
}
return true;
}
/*
身份证判断函数,是返回true,不是返回false
15位数字,18位数字或者最后一位为X(大写)
*/
function isSFZ(str){
if(""==str){
return false;
*/
function isXZ(str){
if(""==str){
return false;
}
var reg = /^[1-6](\.5)?$/;
var r = str.match(reg);
全国身份证及港澳台身份证验证js代码、函数。

// 988058查号网,骗子号码查询(http:// )//一下是验证身份证号码的js函数function checkIdcard(idcard){var Errors=new Array("验证通过!","身份证号码位数不对!","身份证号码出生日期超出范围或含有非法字符!","身份证号码校验错误!","身份证地区非法!");var area={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 retflag=false;var idcard,Y,JYM;var S,M;var idcard_array = new Array();idcard_array = idcard.split("");//地区检验if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];//身份号码位数及格式检验switch(idcard.length){case 15:if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) %100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9] |[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性}else {ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9] |[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性}if(ereg.test(idcard))return Errors[0];else{return Errors[2];}break;case 18://18位身份号码检测//出生日期的合法性检查//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[ 1-2][0-9]))//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1 [0-9]|2[0-8]))if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 )){ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1 -9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式}else{ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1 -9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式}if(ereg.test(idcard)){//测试出生日期的合法性//计算校验位S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2+ parseInt(idcard_array[7]) * 1+ parseInt(idcard_array[8]) * 6+ parseInt(idcard_array[9]) * 3 ;Y = S % 11;M = "F";JYM = "10X98765432";M = JYM.substr(Y,1);//判断校验位if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位else return Errors[3];}else return Errors[2];break;default:return Errors[1];break;}}。
JavaScript二代公民身份证号验证

JavaScript⼆代公民⾝份证号验证⾝份证号码中的校验码是⾝份证号码的最后⼀位,是根据〖中华⼈民共和国国家标准GB 11643-1999〗中有关公民⾝份号码的规定,根据精密的计算公式计算出来的,公民⾝份号码是特征组合码,由⼗七位数字本体码和⼀位数字校验码组成。
计算⽅法1、将前⾯的⾝份证号码17位数分别乘以不同的系数。
从第⼀位到第⼗七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;2、将这17位数字和系数相乘的结果相加;3、⽤加出来和除以11,看余数是多少;4、余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。
其分别对应的最后⼀位⾝份证的号码为1 0 X 9 8 7 6 5 4 3 2;5、通过上⾯得知如果余数是2,就会在⾝份证的第18位数字上出现罗马数字的Ⅹ。
如果余数是10,⾝份证的最后⼀位号码就是2;例如:某男性的⾝份证号码是340524************。
我们要看看这个⾝份证是不是合法的⾝份证。
⾸先:我们计算3*7+4*9+0*10+5*5+...+1*2,前17位的乘积和是189然后:⽤189除以11得出的结果是商17余2最后:通过对应规则就可以知道余数2对应的数字是x。
所以,这是⼀个合格的⾝份证号码。
js代码:1function check_id(){2var idcode= document.getElementById("IDNumber").value3// alert(idcode)4//检测⾝份证号码合法性---全部数字或数字+X/x 18位5// 加权因⼦6var weight_factor = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];7// 校验码8var check_code = ['1', '0', 'X' , '9', '8', '7', '6', '5', '4', '3', '2'];910var code = idcode + "";11var last = idcode[17];//最后⼀位1213var seventeen = code.substring(0,17);1415// ISO 7064:1983.MOD 11-216// 判断最后⼀位校验码是否正确17var arr = seventeen.split("");18var len = arr.length;19var num = 0;20for(var i = 0; i < len; i++){21 num = num + arr[i] * weight_factor[i];22 }2324// 获取余数25var resisue = num%11;26var last_no = check_code[resisue];2728// 格式的正则29// 正则思路30/*31第⼀位不可能是032第⼆位到第六位可以是0-933第七位到第⼗位是年份,所以七⼋位为19或者2034⼗⼀位和⼗⼆位是⽉份,这两位是01-12之间的数值35⼗三位和⼗四位是⽇期,是从01-31之间的数值36⼗五,⼗六,⼗七都是数字0-937⼗⼋位可能是数字0-9,也可能是X38*/39var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/; 4041// 判断格式是否正确42var format = idcard_patter.test(idcode);43// alert(format)44// 返回验证结果,校验码和格式同时正确才算是合法的⾝份证号码45// return last === last_no && format ? true : false;46if(!(format==true && (last_no===last))){47 alert("⾝份证号码格式输⼊有误!")48 document.getElementById("IDNumber").focus();49 }50 }。
Javascript使用正则验证身份证号(简单)

Javascript使⽤正则验证⾝份证号(简单)
⾝份证为15位或者18位,15位的全为数字,18位的前17位为数字,最后⼀位为数字或者⼤写字母”X“。
与之匹配的正则表达式:
(^\d{15}$)|(^\d{17}([0-9]|X)$)
下⾯以Javascript为例进⾏说明:
functionisIdCardNo(num) { num = num.toUpperCase();
//⾝份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后⼀位是校验位,可能为数字或字符X。
if ( !(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num)) )
{
alert('输⼊的⾝份证号长度不对,或者号码不符合规定!\n15位号码应全为数字,18位号码末位可以为数字或X。
');
returnfalse;
};
}
').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) { $numbering.append($('
').text(i)); }; $numbering.fadeIn(1700); }); });
以上所述是⼩编给⼤家介绍的Javascript使⽤正则验证⾝份证号(简单),希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
在此也⾮常感谢⼤家对⽹站的⽀持!。
JavaScrit工具函数之判断是否为合法身份证号码

JavaScrit工具函数之判断是否为合法身份证号码JavaScript工具函数之判断是否为合法身份证号码在实际开发中,经常会遇到需要验证用户输入的身份证号码是否合法的情况。
本文将介绍如何使用JavaScript编写一个工具函数来实现身份证号码的验证。
身份证号码是中国公民个人身份识别的重要依据,其格式由18位数字(最后一位可能为X)组成。
验证身份证号码的合法性需要根据国家相关标准进行检验,具体步骤如下:步骤一:计算身份证号前17位的加权和身份证号前17位的每一位数字都有一个对应的权重,由2的次方递减,依次为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2,将17位数字与对应的权重相乘后,再将相乘结果累加得到加权和。
步骤二:计算加权和除以11的余数将加权和除以11,得到一个余数。
步骤三:将余数与最后一位校验码进行比较校验码是根据前17位数字计算得出的,对应关系为:0、1、2、3、4、5、6、7、8、9、10(对应X),校验码与余数一致即为合法身份证号码。
接下来,我们就开始编写JavaScript工具函数来实现身份证号码的验证:```javascriptfunction isValidIDNumber(idNumber) {// 校验身份证号码的长度if (idNumber.length !== 18) {return false;}// 校验身份证号码的前17位var factor = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];var sum = 0;for (var i = 0; i < 17; i++) {sum += parseInt(idNumber.charAt(i)) * factor[i];}// 校验身份证号码的校验码var checkCodeList = ['1','0','X','9','8','7','6','5','4','3','2'];var checkCode = checkCodeList[sum % 11];if (checkCode !== idNumber.charAt(17)) {return false;}return true;}```上述代码中,我们定义了一个`isValidIDNumber`函数,该函数接受一个参数`idNumber`,用于表示待验证的身份证号码。
JS正则表达式验证身份证号码

JS正则表达式验证⾝份证号码1. function isCardNo(card)2. {3. // ⾝份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后⼀位是校验位,可能为数字或字符X4. var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;5. if(reg.test(card) === false)6. {7. alert("⾝份证输⼊不合法");8. return false;9. }10. } 最近的项⽬中⽤的需要调⽤实名认证的接⼝,实名认证接⼝价格相⽐短信⽽⾔⾼了不是⼏分钱,所以说调⽤实名认证的条件就要严格把关,因此⽤到js验证真实姓名与js验证⾝份证号。
进⼊正题 js验证真实姓名,是⽤的unicode字符的来进⾏匹配,⽽中国⼈的姓名长度⼀般都是2-4,所以重复匹配{2,4}次1.js验证真实姓名1. var regName =/^[\u4e00-\u9fa5]{2,4}$/;2. if(!regName.test(name)){3. alert('真实姓名填写有误');4. return false;5. }js验证⾝份证号,中国的⾝份证号,⼀代⾝份证号是15位的数字,⼆代⾝份证都是18位的,最后⼀位校验位除了可能是数字还可能是'X'或'x',所以有四种可能性:a.15位数字 b.18位数字 c.17位数字,第⼗⼋位是'X' d.17位数字,第⼗⼋位是'x'2.js验证⾝份证号1. var regIdNo = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;2. if(!regIdNo.test(idNo)){3. alert('⾝份证号填写有误');4. return false;5. }。
js身份证号码验证(小程序版)

js⾝份证号码验证(⼩程序版)<view class='bgw'><form>......<view class='ipt-wrapper'><view class='ipt-l'>⾝份证</view><view class='ipt-r'><input type='text' placeholder='请输⼊您的⾝份证号' name="idcard" value='{{idcard}}' bindinput="bindIdcard"/><image src='{{icon}}' class='right-arrow'></image></view></view>.....</form></view><view class='submit' bindtap='submit'>提交预约</view><!-- 弹出层 --><view class='mask' wx:if="{{maskState}}" bindtap='hidelayer'></view><!-- 表单出错 --><view class='layer' wx:if="{{warnState}}"><image src='{{excitedicon}}' class='infoicon'></image><view class='info'>{{errorinfo}}</view><view class='btn-small' bindtap='hidelayer'>好的</view></view>....var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因⼦var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2];Page({/*** 页⾯的初始数据*/data: {name: '',phone: '',idcard: '',errorinfo: '',maskState: false,warnState: false,},// 关闭弹出层hidelayer:function(){this.setData({maskState: false,warnState: false,errState: false,okState: false})},// 表单提交submit:function(){var idcard = this.data.idcard;var reg = /^1\d{10}$/;if (this.isBlank(idcard)) {this.setData({maskState: true,warnState: true,errorinfo: '⾝份证号不能为空'})return}if (!this.IdCardValidate(idcard)){this.setData({maskState: true,warnState: true,errorinfo: '⾝份证号格式错误'})return}},IdCardValidate:function (idCard) {idCard = this.trim(idCard.replace(/ /g, "")); //去掉字符串头尾空格if(idCard.length == 15) {return this.isValidityBrithBy15IdCard(idCard); //进⾏15位⾝份证的验证} else if (idCard.length == 18) {var a_idCard = idCard.split(""); // 得到⾝份证数组if (this.isValidityBrithBy18IdCard(idCard) && this.isTrueValidateCodeBy18IdCard(a_idCard)) { //进⾏18位⾝份证的基本验证和第18位的验证return true;} else {return false;}} else {return false;}},/*** 判断⾝份证号码为18位时最后的验证位是否正确* @param a_idCard ⾝份证号码数组* @return*/isTrueValidateCodeBy18IdCard:function(a_idCard) {var sum = 0; // 声明加权求和变量if (a_idCard[17].toLowerCase() == 'x') {a_idCard[17] = 10; // 将最后位为x的验证码替换为10⽅便后续操作}for (var i = 0; i < 17; i++) {sum += Wi[i] * a_idCard[i]; // 加权求和}var valCodePosition = sum % 11; // 得到验证码所位置if (a_idCard[17] == ValideCode[valCodePosition]) {return true;} else {return false;}},/*** 验证18位数⾝份证号码中的⽣⽇是否是有效⽣⽇* @param idCard 18位书⾝份证字符串* @return*/isValidityBrithBy18IdCard:function (idCard18) {var year = idCard18.substring(6, 10);var month = idCard18.substring(10, 12);var day = idCard18.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;}},/*** 验证15位数⾝份证号码中的⽣⽇是否是有效⽣⽇* @param idCard15 15位书⾝份证字符串* @return*/isValidityBrithBy15IdCard:function (idCard15) {var year = idCard15.substring(6, 8);var month = idCard15.substring(8, 10);var day = idCard15.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;}},//去掉字符串头尾空格trim:function (str) {return str.replace(/(^\s*)|(\s*$)/g, "");},// 判断是否为空isBlank:function(_value) {if (_value == null || _value == "" || _value == undefined) {return true;}return false;},bindIdcard: function (e) {this.setData({idcard: e.detail.value})},})。
javascript验证身份证号

javascript验证⾝份证号我们在做互联⽹⽹站时,注册个⼈资料时,经常要⽤到⾝份证号,我们需要对⾝份证进验证,不然别⼈随便输个号码就通过,让你感觉这个⽹站做得很shit。
⾝份证号是有规则的。
结构和形式 1.号码的结构 公民⾝份号码是特征组合码,由⼗七位数字本体码和⼀位校验码组成。
排列顺序从左⾄右依次为:六位数字地址码,⼋位数字出⽣⽇期码,三位数字顺序码和⼀位数字校验码。
2.地址码 表⽰编码对象常住户⼝所在县(市、旗、区)的⾏政区划代码,按GB/T2260的规定执⾏。
3.出⽣⽇期码 表⽰编码对象出⽣的年、⽉、⽇,按GB/T7408的规定执⾏,年、⽉、⽇代码之间不⽤分隔符。
4.顺序码 表⽰在同⼀地址码所标识的区域范围内,对同年、同⽉、同⽇出⽣的⼈编定的顺序号,顺序码的奇数分配给男性,偶数分配给⼥性。
5.校验码 根据前⾯⼗七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。
计算⽅法1、将前⾯的⾝份证号码17位数分别乘以不同的系数。
从第⼀位到第⼗七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
2、将这17位数字和系数相乘的结果相加。
3、⽤加出来和除以11,看余数是多少?4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。
其分别对应的最后⼀位⾝份证的号码为1-0-X -9-8-7-6-5-4-3-2。
5、通过上⾯得知如果余数是3,就会在⾝份证的第18位数字上出现的是9。
如果对应的数字是2,⾝份证的最后⼀位号码就是罗马数字x。
例如:某男性的⾝份证号码为【530102************】,我们看看这个⾝份证是不是合法的⾝份证。
⾸先我们得出前17位的乘积和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后⽤189除以11得出的结果是189/11=17----2,也就是说其余数是2。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
// 988058查号网,骗子号码查询(http:// )
//一下是验证身份证号码的js函数
function checkIdcard(idcard){
var Errors=new Array(
"验证通过!",
"身份证号码位数不对!",
"身份证号码出生日期超出范围或含有非法字符!",
"身份证号码校验错误!",
"身份证地区非法!"
);
var area={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 retflag=false;
var idcard,Y,JYM;
var S,M;
var idcard_array = new Array();
idcard_array = idcard.split("");
//地区检验
if(area[parseInt(idcard.substr(0,2))]==null) return Errors[4];
//身份号码位数及格式检验
switch(idcard.length){
case 15:
if ( (parseInt(idcard.substr(6,2))+1900) % 4 == 0 || ((parseInt(idcard.substr(6,2))+1900) %
100 == 0 && (parseInt(idcard.substr(6,2))+1900) % 4 == 0 )){
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9] |[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;//测试出生日期的合法性
}
else {
ereg=/^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9] |[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;//测试出生日期的合法性
}
if(ereg.test(idcard))
return Errors[0];
else
{
return Errors[2];
}
break;
case 18:
//18位身份号码检测
//出生日期的合法性检查
//闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[ 1-2][0-9]))
//平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1 [0-9]|2[0-8]))
if ( parseInt(idcard.substr(6,4)) % 4 == 0 || (parseInt(idcard.substr(6,4)) % 100 == 0 && parseInt(idcard.substr(6,4))%4 == 0 ))
{
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1 -9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;//闰年出生日期的合法性正则表达式}
else
{
ereg=/^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1 -9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;//平年出生日期的合法性正则表达式
}
if(ereg.test(idcard)){//测试出生日期的合法性
//计算校验位
S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
+ parseInt(idcard_array[7]) * 1
+ parseInt(idcard_array[8]) * 6
+ parseInt(idcard_array[9]) * 3 ;
Y = S % 11;
M = "F";
JYM = "10X98765432";
M = JYM.substr(Y,1);//判断校验位
if(M == idcard_array[17]) return Errors[0]; //检测ID的校验位
else return Errors[3];
}
else return Errors[2];
break;
default:
return Errors[1];
break;
}
}。