某某茶叶有限公司欢迎您!
金沙棋牌在线 > 服务器&运维 > js完成二代身份ID号码证实详细解释_javascript技艺_脚本之家金沙棋牌在线

js完成二代身份ID号码证实详细解释_javascript技艺_脚本之家金沙棋牌在线

时间:2019-12-29 06:39

以下是根据身份证号码编码规则,使用JS对其进行有效性验证代码

废话少说,直接上代码,注释里解析的很清楚了,这里就不BB了。

js实现身份证号码验证的简单实例

 本篇文章主要是对js实现身份证号码验证的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助

以下是根据身份证号码编码规则,使用JS对其进行有效性验证代码

 

IdCard-Validate.js代码如下: 

 

 代码如下:

/**

 * 身份证15位编码规则:dddddd yymmdd xx p 

 * dddddd:地区码 

 * yymmdd: 出生年月日 

 * xx: 顺序类编码,无法确定 

 * p: 性别,奇数为男,偶数为女

 * <p />

 * 身份证18位编码规则:dddddd yyyymmdd xxx y 

 * dddddd:地区码 

 * yyyymmdd: 出生年月日 

 * xxx:顺序类编码,无法确定,奇数为男,偶数为女 

 * y: 校验码,该位数值可通过前17位计算获得

 * <p />

 * 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代表X

function IdCardValidate(idCard) {

 idCard = trim(idCard.replace(/ /g, ""));

 if (idCard.length == 15) {

  return isValidityBrithBy15IdCard(idCard);

 } else if (idCard.length == 18) {

  var a_idCard = idCard.split("");// 得到身份证数组

  if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){

   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;

 }

}

/**

 * 通过身份证判断是男是女

 * @param idCard 15/18位身份证号码 

 * @return 'female'-女、'male'-男

 */

function maleOrFemalByIdCard(idCard){

 idCard = trim(idCard.replace(/ /g, ""));// 对身份证号码做处理。包括字符间有空格。

 if(idCard.length==15){

  if(idCard.substring(14,15)%2==0){

   return 'female';

  }else{

   return 'male';

  }

 }else if(idCard.length ==18){

  if(idCard.substring(14,17)%2==0){

   return 'female';

  }else{

   return 'male';

  }

 }else{

  return null;

 }

// 可对传入字符直接当作数组来处理

// if(idCard.length==15){

// alert(idCard[13]);

// if(idCard[13]%2==0){

// return 'female';

// }else{

// return 'male';

// }

// }else if(idCard.length==18){

// alert(idCard[16]);

// if(idCard[16]%2==0){

// return 'female';

// }else{

// return 'male';

// }

// }else{

// return null;

// }

}

 /**

  * 验证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, "");

}

 

 

对于上述代码中,关于性别的判断在实际使用中,可加入首先判断身份证是否有效。在本代码示例中并未进行该种判断,有点鸡肋的感觉,可在实际使用中根据情况进行丰满。

 

本篇文章主要是对js实现身份证号码验证的简单实例进行了介绍,需要的朋友可以过来参考下,希望对大...

IdCard-Validate.js代码如下: 复制代码 代码如下:/*** 身份证15位编码规则:dddddd yymmdd xx p * dddddd:地区码 * yymmdd: 出生年月日 * xx: 顺序类编码,无法确定 * p: 性别,奇数为男,偶数为女*

复制代码 代码如下:/*根据〖中华人民共和国国家标准 GB 11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。地址码表示编码对象常住户口所在县的行政区划代码。出生日期码表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。顺序码表示同一地址码所标识的区域范围内,对同年、月、日出生的人员编定的顺序号。顺序码的奇数分给男性,偶数分给女性。校验码是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。出生日期计算方法。位的身份证编码首先把出生年扩展为4位,简单的就是增加一个19或18,这样就包含了所有1800-1999年出生的人;年后出生的肯定都是18位的了没有这个烦恼,至于1800年前出生的,那啥那时应该还没身份证号这个东东,⊙﹏⊙b汗...下面是正则表达式:出生日期1800-2099 ?d{2}身份证正则表达式 /^d{6}?d{2}d{3}$/i 位校验规则 6位地址编码+6位出生日期+3位顺序号位校验规则 6位地址编码+8位出生日期+3位顺序号+1位校验位校验位规则 公式:∑……………………………………中: i----表示号码字符从由至左包括校验码在内的位置序号; ai----表示第i位置上的号码字符值; Wi----示第i位置上的加权因子,其数值依据公式Wi=2^计算得出。i 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1*///身份证号合法性验证 //支持15位和18位身份证号//支持地址编码、出生日期、校验位验证function IdentityCodeValid { 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 pass= true;