JavaScrit工具函数之判断是否为合法身份证号码
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);
超精准的javascript验证身份证号的方法
超精准的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二代公民身份证号验证
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使⽤正则验证⾝份证号(简单),希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
在此也⾮常感谢⼤家对⽹站的⽀持!。
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正则表达式验证身份证号码是否合法(两种方法)
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正则表达式验证身份证号码
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验证身份证号
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正则表达式验证身份证号码是否合法(两种方法)讲解
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身份证校验正则
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 身份证校验正则是网络开发中常用的一种解决方案,通过构建出正则表达式以及校检码的计算,可以对提交的身份证号码进行长度和省份格式的校验,以及基于算法的真实性检测,从而有效地确保身份证号正确性,实现安全管理及减少冗余数据的负担。
JS正则表达式完美实现身份证校验功能
JS正则表达式完美实现⾝份证校验功能注意:1、只针对18为⾝份证号码进⾏校验,现在15位的应该很少了,2、不区分xX⼤⼩写,3、出⽣年份1900-2099,每⽉的天数也进⾏相关验证(考虑的闰⽉的情况),4、校验规则详见,这个写的⽐较详细和清楚,相信看过后都可以⾃⼰写⼀个,5、⽬前还⽆法对区位码就进⾏精确校验,本⼈搜集整理了区位码,提供了⼀个查询api,仅攻参考。
有不精确的地⽅可以留⾔指出6、这个验证函数⽬前在项⽬中实际运⾏,暂未发现问题,有问题会进⾏更新。
以上直接上代码:function testid(id) {// 1 "验证通过!", 0 //校验不通过 // id为⾝份证号码var format = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/; //号码规则校验if(!format.test(id)){return {'status':0,'msg':'⾝份证号码不合规'};}//区位码校验//出⽣年⽉⽇校验前正则限制起始年份为1900;var year = id.substr(6,4),//⾝份证年month = id.substr(10,2),//⾝份证⽉date = id.substr(12,2),//⾝份证⽇time = Date.parse(month+'-'+date+'-'+year),//⾝份证⽇期时间戳datenow_time = Date.parse(new Date()),//当前时间戳dates = (new Date(year,month,0)).getDate();//⾝份证当⽉天数if(time>now_time||date>dates){return {'status':0,'msg':'出⽣⽇期不合规'}}//校验码判断var c = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2); //系数var b = new Array('1','0','X','9','8','7','6','5','4','3','2'); //校验码对照表var id_array = id.split("");var sum = 0;for(var k=0;k<17;k++){sum+=parseInt(id_array[k])*parseInt(c[k]);}if(id_array[17].toUpperCase() != b[sum%11].toUpperCase()){return {'status':0,'msg':'⾝份证校验码不合规'}}return {'status':1,'msg':'校验通过'}}。
JavaScript常用表单验证正则表达式(身份证、电话号码、邮编、日期、IP等)
JavaScript常⽤表单验证正则表达式(⾝份证、电话号码、邮编、⽇期、IP等)⾝份证正则表达式//⾝份证正则表达式(15位)isIDCard1=/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/;//⾝份证正则表达式(18位)isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;地区、性别和⾝份证进⾏判断的正则表达式:<script>varaCity={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:”国外”}function cidInfo(sId){var iSum=0var info=”"if(!/^\d{17}(\d|x)$/i.test(sId))return false;sId=sId.replace(/x$/i,”a”);if(aCity[parseInt(sId.substr(0,2))]==null)return “Error:⾮法地区”;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 “Error:⾮法⽣⽇”;for(var i = 17;i>=0;i –) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 – i),11)if(iSum%11!=1)return “Error:⾮法证号”;return aCity[parseInt(sId.substr(0,2))]+”,”+sBirthday+”,”+(sId.substr(16,1)%2?”男”:”⼥”)}</script>————-正则表达式全集中国电话号码验证匹配形式如:0511-******* 或者021-******** 或者 021-********-555 或者 (0511)4405222正则表达式 “((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*”中国邮政编码验证匹配形式如:215421正则表达式 “d{6}”电⼦邮件验证匹配形式如:justali@正则表达式 “w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*”⾝份证验证匹配形式如:15位或者18位⾝份证正则表达式 “d{18}|d{15}”常⽤数字验证正则表达式“d{n}” n为规定长度“d{n,m}” n到m的长度范围⾮法字符验证匹配⾮法字符如:< > & / ‘ |正则表达式 [^<>&/|'\]+⽇期验证匹配形式如:20030718,030718范围:1900–2099正则表达式((((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}正则表达式是⼀个好东西,但是⼀般情况下,我们需要验证的内容少之⼜少。
使用javascript实现身份证校验与信息提取
使⽤javascript实现⾝份证校验与信息提取我们先了解⼀下⾝份证是怎么校验的:将前⾯的⾝份证号码17位数分别乘以不同的系数,将这17位数字和系数相乘的结果相加,然后除以11求余,根据最后的余数对应校验码,判断⾝份证是否符合要求。
现在我们开始写代码<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><p>⾝份证号:<input type='text' id='idCard'/></p><P>出⽣⽇期:<input type='text' readonly id='age'/></P><P>性 别:<input type='radio' disabled name='sex' id='man'>男<input type='radio' name='sex' disabled id='woman'>⼥</P><P>籍 贯:<input type='text' readonly id='dess'></P><button type='button' id='btnSub'>确定</button><script src='js/jquery-1.11.3.min.js'></script><script>$("#btnSub").click(function(){var idCard = $("#idCard").val();//根据⾝份证不同的位置,截取相对应的数据var sex = idCard.substring(16,17);var num = idCard.substring(17,18);var year = idCard.substring(6,10);var month = idCard.substring(10,12);var day = idCard.substring(12,14);var age = year+"-"+month+"-"+day;var date = new Date(age);var sum = 0;var arr = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,0];var arr2 = [1,0,'X',9,8,7,6,5,4,3,2];//判断⾝份证是否为空,或者长度有没有达到要求(这⾥规定⾝份证18位)if(!(idCard && /^[\d]{18}$/.test(idCard))){alert("⾝份证输⼊格式不对!")return false;}else{//计算第18位数是否符合要求for(var i=0;i<18;i++){sum += idCard.substring(i,i+1)*arr[i]}if(num== arr2[sum%11] || num===arr2[sum%11]){ $("#age").val(age)if(sex%2 == 1){$("#man").prop("checked","true")}else{$("#woman").prop("checked","true")}$.ajax({url:"IdCardServlet",type:"get",data:{idCard:idCard},success:function(data){$.each(data,function(index,obj){$("#dess").val(obj.detail);})}})}else{alert("⾝份证输⼊格式不对!")$("#man").removeAttr("checked")$("#woman").removeAttr("checked")$("#dess").val("");$("#age").val("");return false;}}})</script></body></html>效果图:如果需要显⽰籍贯的话,需要那对应的数字去数据库中查找显⽰。
前端JS校验银行卡卡号和身份证号码(附ES6版方法)
前端JS校验银⾏卡卡号和⾝份证号码(附ES6版⽅法)1、银⾏卡卡号校验⽅法。
function luhnCheck(bankno) {var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后⼀位(与luhn进⾏⽐较)var first15Num = bankno.substr(0, bankno.length - 1); //前15或18位var newArr = new Array();for (var i = first15Num.length - 1; i > -1; i--) { //前15或18位倒序存进数组newArr.push(first15Num.substr(i, 1));}var arrJiShu = new Array(); //奇数位*2的积 <9var arrJiShu2 = new Array(); //奇数位*2的积 >9var arrOuShu = new Array(); //偶数位数组for (var j = 0; j < newArr.length; j++) {if ((j + 1) % 2 == 1) { //奇数位if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);else arrJiShu2.push(parseInt(newArr[j]) * 2);} else //偶数位arrOuShu.push(newArr[j]);}var jishu_child1 = new Array(); //奇数位*2 >9 的分割之后的数组个位数var jishu_child2 = new Array(); //奇数位*2 >9 的分割之后的数组⼗位数for (var h = 0; h < arrJiShu2.length; h++) {jishu_child1.push(parseInt(arrJiShu2[h]) % 10);jishu_child2.push(parseInt(arrJiShu2[h]) / 10);}var sumJiShu = 0; //奇数位*2 < 9 的数组之和var sumOuShu = 0; //偶数位数组之和var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组⼗位数之和var sumTotal = 0;for (var m = 0; m < arrJiShu.length; m++) {sumJiShu = sumJiShu + parseInt(arrJiShu[m]);}for (var n = 0; n < arrOuShu.length; n++) {sumOuShu = sumOuShu + parseInt(arrOuShu[n]);}for (var p = 0; p < jishu_child1.length; p++) {sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);}//计算总和sumTotal = parseInt(sumJiShu) + parseInt(sumOuShu) + parseInt(sumJiShuChild1) + parseInt(sumJiShuChild2);//计算luhn值var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;var luhn = 10 - k;if (lastNum == luhn) { return true;} else {return false;}}2、⾝份证号校验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, "");}ES6版校验⽅法1、银⾏卡校验export function bankCardValidate(bankno) {const lastNum = +bankno.substr(bankno.length - 1, 1);const first15Num = bankno.substr(0, bankno.length - 1);const newArr = [];for (let i = first15Num.length - 1; i > -1; i -= 1) {newArr.push(first15Num.substr(i, 1));}const arrJiShu = [];const arrJiShu2 = [];const arrOuShu = [];for (let j = 0; j < newArr.length; j += 1) {if ((j + 1) % 2 === 1) {if (parseInt(newArr[j], 10) * 2 < 9) {arrJiShu.push(parseInt(newArr[j], 10) * 2);} else {arrJiShu2.push(parseInt(newArr[j], 10) * 2);}} else {arrOuShu.push(newArr[j]);}}const jishuChild1 = [];const jishuChild2 = [];for (let h = 0; h < arrJiShu2.length; h += 1) {jishuChild1.push(parseInt(arrJiShu2[h], 10) % 10);jishuChild2.push(parseInt(arrJiShu2[h], 10) / 10);}let sumJiShu = 0;let sumOuShu = 0;let sumJiShuChild1 = 0;let sumJiShuChild2 = 0;let sumTotal = 0;for (let m = 0; m < arrJiShu.length; m += 1) {sumJiShu += parseInt(arrJiShu[m], 10);}for (let n = 0; n < arrOuShu.length; n += 1) {sumOuShu += parseInt(arrOuShu[n], 10);}for (let p = 0; p < jishuChild1.length; p += 1) {sumJiShuChild1 += parseInt(jishuChild1[p], 10);sumJiShuChild2 += parseInt(jishuChild2[p], 10);}sumTotal = parseInt(sumJiShu, 10) + parseInt(sumOuShu, 10)+ parseInt(sumJiShuChild1, 10) + parseInt(sumJiShuChild2, 10);const k = parseInt(sumTotal, 10) % 10 === 0 ? 10 : parseInt(sumTotal, 10) % 10; const luhn = 10 - k;if (lastNum === luhn) {return true;} else {return false;}2、⾝份证号校验export function IdCardValidate(idCard) {const idCards = trim(idCard.replace(/ /g, ''));if (idCard.length === 15) {return isValidityBrithBy15IdCard(idCards);} else if (idCards.length === 18) {const idCardS = idCards.split(''); // 得到⾝份证数组if (isValidityBrithBy18IdCard(idCards) && isTrueValidateCodeBy18IdCard(idCardS)) { return true;} else {return false;}} else {return false;}function isTrueValidateCodeBy18IdCard(aIdCard) {const Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1];const ValideCode = ['1', '0', '10', '9', '8', '7', '6', '5', '4', '3', '2'];let sum = 0;const AidCard = aIdCard;if (AidCard[17].toLowerCase() === 'x') {AidCard[17] = '10';}for (let i = 0; i < 17; i += 1) {sum += Wi[i] * AidCard[i];}const valCodePosition = sum % 11;if (AidCard[17] === ValideCode[valCodePosition]) {return true;} else {return false;}}function isValidityBrithBy18IdCard(idCard18) {const year = idCard18.substring(6, 10);const month = idCard18.substring(10, 12);const day = idCard18.substring(12, 14);const tempDate = new Date(year, parseFloat(month) - 1, parseFloat(day));// 这⾥⽤getFullYear()获取年份,避免千年⾍问题if (tempDate.getFullYear()!== parseFloat(year)|| tempDate.getMonth()!== parseFloat(month) - 1|| tempDate.getDate()!== parseFloat(day)) {return false;} else {return true;}}function isValidityBrithBy15IdCard(idCard15) {const year = idCard15.substring(6, 8);const month = idCard15.substring(8, 10);const day = idCard15.substring(10, 12);const tempDate = new Date(year, parseFloat(month) - 1, parseFloat(day));if (tempDate.getYear()!== parseFloat(year) ||tempDate.getMonth()!== parseFloat(month) - 1 || tempDate.getDate() !== parseFloat(day)) {return false;} else {return true;}function trim(str) {return str.replace(/(^\s*)|(\s*$)/g, ''); }}。
JavaScrit工具函数之判断是否为合法用户名
JavaScrit工具函数之判断是否为合法用户名JavaScript工具函数之判断是否为合法用户名在Web开发中,用户输入的用户名是常见的信息之一。
为了保证用户数据的安全性和系统的正常运行,我们需要编写JavaScript工具函数来判断输入的用户名是否合法。
本文将介绍一种常见的实现方式。
要判断一个用户名是否合法,我们可以根据以下规则进行检测:1. 用户名只能包含字母、数字以及下划线。
不允许出现其他特殊字符。
2. 用户名的长度应在4到16个字符之间。
3. 用户名必须以字母开头。
基于以上规则,我们可以编写一个合法用户名的判断函数,示例代码如下:```javascriptfunction isValidUsername(username) {// 检测用户名长度if (username.length < 4 || username.length > 16) {return false;}// 检测用户名是否以字母开头if (!username[0].match(/[a-zA-Z]/)) {return false;}// 检测用户名是否只包含字母、数字和下划线if (!username.match(/^[\w]+$/)) {return false;}return true;}```通过上述代码,我们可以使用`isValidUsername()`函数来判断一个用户名是否合法。
该函数返回一个布尔值,`true`表示合法,`false`表示非法。
接下来,我们可以使用该函数来对用户输入进行验证。
示例代码如下:```javascriptconst inputUsername = prompt("请输入用户名:");if (isValidUsername(inputUsername)) {alert("用户名合法!");} else {alert("用户名非法,请重新输入!");}```在上述示例中,我们使用`prompt()`函数接收用户输入的用户名,并通过`isValidUsername()`函数进行合法性检测。
java身份证合法性校验
java身份证合法性校验直接上代码,里面有测试类[java] view plaincopy1./**2.* 身份证前6位【ABCDEF】为行政区划数字代码(简称数字码)说明(参考《GB/T 2260-2007 中华人民共和国行政区划代码》):3.* 该数字码的编制原则和结构分析,它采用三层六位层次码结构,按层次分别表示我国各省(自治区,直辖市,特别行政区)、4.* 市(地区,自治州,盟)、县(自治县、县级市、旗、自治旗、市辖区、林区、特区)。
5.数字码码位结构从左至右的含义是:6.第一层为AB两位代码表示省、自治区、直辖市、特别行政区;7.第二层为CD两位代码表示市、地区、自治州、盟、直辖市所辖市辖区、县汇总码、省(自治区)直辖县级行政区划汇总码,其中:8.——01~20、51~70表示市,01、02还用于表示直辖市所辖市辖区、县汇总码;9.——21~50表示地区、自治州、盟;10.——90表示省(自治区)直辖县级行政区划汇总码。
11.第三层为EF两位表示县、自治县、县级市、旗、自治旗、市辖区、林区、特区,其中:12.——01~20表示市辖区、地区(自治州、盟)辖县级市、市辖特区以及省(自治区)直辖县级行政区划中的县级市,01通常表示辖区汇总码;13.——21~80表示县、自治县、旗、自治旗、林区、地区辖特区;14.——81~99表示省(自治区)辖县级市。
15.*/16.17.import java.text.ParseException;18.import java.text.SimpleDateFormat;19.import java.util.Calendar;20.import java.util.Date;21.import java.util.GregorianCalendar;22.import java.util.HashMap;23.import java.util.Map;24.import java.util.regex.Pattern;25.26./**27.* <p>28.* 类说明:身份证合法性校验29.* </p>30.* <p>31.* --15位身份证号码:第7、8位为出生年份(两位数),第9、10位为出生月份,第11、12位代表出生日期,第15位代表性别,奇数为男,偶数为女。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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位的
加权和、校验码与余数的比对,我们可以验证所输入的身份证号码的
合法性。
在实际开发中,合法身份证号码的验证非常有用,可以用于
用户信息的验证以及相关业务的处理。