JavaScrit工具函数之判断是否为合法身份证号码
- 格式:docx
- 大小:37.39 KB
- 文档页数:4
超精准的javascript验证⾝份证号的⽅法编写程序前先来了解下⾝份证号的构成:⾝份证号分为两种,旧的为15位,新的为18位。
⾝份证15位编码规则:dddddd yymmdd xx p其中 dddddd:地区码 yymmdd: 出⽣年⽉⽇ xx: 顺序类编码,⽆法确定 p: 性别,奇数为男,偶数为⼥;⾝份证18位编码规则:dddddd yyyymmdd xxx y其中 dddddd:地区码 yyyymmdd: 出⽣年⽉⽇ xxx:顺序类编码,⽆法确定,奇数为男,偶数为⼥ y: 校验码,该位数值可通过前17位计算获得,计算的公式见程序,⼀些需要⽤到的常数:18位号码加权因⼦为(从右到左) Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2,1 ] 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ] 校验位计算公式:Y_P = mod( ∑(Ai×Wi),11 )i为⾝份证号码从右往左数的 2...18 位; Y_P为脚丫校验码所在校验码数组位置。
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 ]; // ⾝份证验证位值.10代表Xfunction IdCardValidate(idCard) {idCard = trim(idCard.replace(/ /g, "")); //去掉字符串头尾空格if (idCard.length == 15) {return isValidityBrithBy15IdCard(idCard); //进⾏15位⾝份证的验证} else if (idCard.length == 18) {var a_idCard = idCard.split(""); // 得到⾝份证数组if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){ //进⾏18位⾝份证的基本验证和第18位的验证return true;}else {return false;}} else {return false;}}/*** 判断⾝份证号码为18位时最后的验证位是否正确* @param a_idCard ⾝份证号码数组* @return*/function isTrueValidateCodeBy18IdCard(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]; // 加权求和}valCodePosition = sum % 11; // 得到验证码所位置if (a_idCard[17] == ValideCode[valCodePosition]) {return true;} else {return false;}}/*** 验证18位数⾝份证号码中的⽣⽇是否是有效⽣⽇* @param idCard 18位书⾝份证字符串* @return*/function isValidityBrithBy18IdCard(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*/function isValidityBrithBy15IdCard(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;}}//去掉字符串头尾空格function trim(str) {return str.replace(/(^\s*)|(\s*$)/g, "");}根据⾝份证号对其进⾏性别的判定/*** 通过⾝份证判断是男是⼥* @param idCard 15/18位⾝份证号码* @return 'female'-⼥、'male'-男*/function maleOrFemalByIdCard(idCard){idCard = trim(idCard.replace(/ /g, "")); // 对⾝份证号码做处理。
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使⽤正则验证⾝份证号(简单)
⾝份证为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使⽤正则验证⾝份证号(简单),希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
在此也⾮常感谢⼤家对⽹站的⽀持!。
JavaScript判断输⼊框输⼊的名字是否合法(⽀持分隔符),以及⾝份证号码是否合法//在进⾏实名认证的时候,将⽤户所填信息上传⾄实名认证接⼝之前判断⽤户的输⼊是否合法后再进⾏认证,可以有效的节约实名认证的经济消耗//判断输⼊的名字是否合法(⽀持少数民族的分隔符[ · ])// [ · ]的Unicode为u00b7function isChineseName(name){ //把名字中的分隔符(·)去掉,再判断是否全为中⽂,且长度在范围为2-15var nameWithoutDot = name.replace(/\u00b7/g, '');console.log(nameWithoutDot);if(/^[\u4e00-\u9fa5]{2,15}$/i.test(nameWithoutDot)){ return true;alert("合法名字");}else{ return false;alert("不合法名字");}}//判断⾝份证号码是否输⼊合法function isLeagalIdNum(id){ //前两位数字的合法范围var legalProvinceId = [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];var isLegalProvinceId = legalProvinceId.includes(parseInt(id.substring(0, 2))); //前两位省份码是否合法 //3,4位表⽰城市代码,最⼤为70var isLegalCityId = (parseInt(id.substring(2, 4)) <= 70 && parseInt(id.substring(2, 4)) >= 1); // 3、4位城市码是否合法//第5、6位代表城市的区,范围01 ~ 99;判断是否⼤于0 就好var islegalAreaId = (parseInt(id.substring(4, 6)) > 0)// 第7-10位出⽣年份是否合法 (设置范围为 1900年⾄现在年份,120岁的应该不会玩⼿机吧 --)var isLegalBirthYear = (parseInt(id.substring(6, 10)) <= new Date().getFullYear() && parseInt(id.substring(6, 10)) >= 1900);// 判断11、12位⽉份是否合法var isLegalBirthMonth = (parseInt(id.substring(10, 12)) <= 12 && parseInt(id.substring(10, 12)) >= 1);if (parseInt(id.substring(6, 10)) == new Date().getFullYear() && parseInt(id.substring(10, 12)) > (new Date().getMonth() + 1)) //判断所填⽉份是否⼤于当前⽉份{isLegalBirthMonth = false;}// 判断13、14位⽇期是否合法var bigMonth = [1, 3, 4, 7, 8, 10, 12]; //分⼤⽉⼩⽉进⾏判断var isLegalBirthDay = false;if (bigMonth.includes(parseInt(id.substring(10, 12)))) {isLegalBirthDay = (parseInt(id.substring(12, 14)) >= 1 && parseInt(id.substring(12, 14)) <= 31)} else {if (parseInt(id.substring(10, 12)) == 2) { //⼆⽉最多29天,这⾥就不判断闰年平年了isLegalBirthDay = (parseInt(id.substring(12, 14)) >= 1 && parseInt(id.substring(12, 14)) <= 29);} else {isLegalBirthDay = (parseInt(id.substring(12, 14)) >= 1 && parseInt(id.substring(12, 14)) <= 30);}}if (parseInt(id.substring(6, 10)) == new Date().getFullYear() && parseInt(id.substring(6, 10)) == new Date().getMonth() && parseInt(id.substring(10, 12)) > new Date().getDate()) //判断所填⽉份是否⼤于当前⽉份isLegalBirthDay = false;return isLegalProvinceId && isLegalCityId && islegalAreaId && isLegalBirthYear && isLegalBirthMonth && isLegalBirthDay;}。
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、正则表达式判断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;}第⼆种⽅法: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; };。
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. }。
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。
JavaScript正则表达式验证身份证号码是否合法(两种方法)正则表达式(regular expression)是一个描述字符模式的对象。
下面通过本篇文章给大家介绍js正则表达式验证身份证号码是否合法,需要的朋友可以参考下本篇文章第一种方法:在用户注册页面有些需求要求的比较严格,需要对身份证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、正则表达式判断第二种方法:6768697071727374757677787980818283848586位),皆为数字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位),校验位末尾可能为Xif(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;。
js身份证校验正则JavaScript身份证校验正则:1、基本概念:身份证校验正则是指在使用JavaScript语言中,通过构建正则表达式的匹配规则来校验身份证号的合法性。
通过构建出正则表达式,可以对填写的 long string 或者number 有效地、高效地进行校验。
2、基本校验步骤:(1)长度验证:身份证号长度为15/18位;(2)检查省份格式:身份证号必须符合当前有效的省市编码表;(3)校验校检码:18位的身份证号码末位的校检码为安全码,校检位的计算方法是基于号码前17位的号码加权求和,然后进行11对应的校检码计算,最后与身份证的末尾一位相互照应,以及检验输入号码的真实性。
3、具体正则表达式:(1)身份证15位:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$(2)身份证18位:^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$4、校验示例:(1)如果载入的是一个字符串:if (str.match(/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/))//string is a valid IDelse//string is a invalid ID5、总结:JavaScript 身份证校验正则是网络开发中常用的一种解决方案,通过构建出正则表达式以及校检码的计算,可以对提交的身份证号码进行长度和省份格式的校验,以及基于算法的真实性检测,从而有效地确保身份证号正确性,实现安全管理及减少冗余数据的负担。
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工具函数来实现身份证号码的验证:
```javascript
function 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`,用于表示待验证的身份证号码。
首先,我们判断身份证号码的长度是否为18位,如果不是则直接返回`false`。
然后,根据身份证号码的前17位和权重进行累加,并计算加权和除以11的余数。
最后,将余数与校验码进行比较,如果一致则返回`true`,否则返回`false`。
接下来,我们可以通过如下代码来测试我们的工具函数:
```javascript
var idNumber = prompt("请输入身份证号码:");
if (isValidIDNumber(idNumber)) {
alert("身份证号码合法!");
} else {
alert("身份证号码不合法!");
}
```
通过以上的代码,我们可以在网页中弹框提示用户输入身份证号码,并根据验证结果弹框提示用户输入的身份证号码是否合法。
总结:
通过本文的介绍,我们了解了如何使用JavaScript编写一个工具函
数来判断身份证号码是否合法。
通过对身份证号码的长度、前17位的
加权和、校验码与余数的比对,我们可以验证所输入的身份证号码的
合法性。
在实际开发中,合法身份证号码的验证非常有用,可以用于
用户信息的验证以及相关业务的处理。