• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
统哥
博客园    首页    新随笔    联系   管理    订阅  订阅

js身份证号码验证,严格验证

身份证号码格式的验证:

1、简单位数和数字或末尾X验证

1 $ValidateFn.ShenFenZheng_Simple = function(eleValue)
2 {
3     var pattern = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
4     if (pattern.test(eleValue)) {
5         return "通过";
6     }else{
7         return "身份证验证失败";
8     }
9 }

 

2、严格验证身份证信息规则,包含区域,生日,后10位

  1  
  2 //身份证验证
  3  
  4 var $IdCard = { };
  5 
  6 $IdCard.GetIdCardArea = function (idcard)
  7 {
  8     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: "国外" };
  9     var idcard, Y, JYM;
 10     var S, M;
 11     var idcard_array = new Array();
 12     idcard_array = idcard.split("");
 13     //地区检验
 14     if (area[parseInt(idcard.substr(0, 2))] == null)
 15     {
 16         return false;
 17     }
 18     else
 19     {
 20         return area[parseInt(idcard.substr(0, 2))];
 21     }
 22 }
 23 
 24 
 25 
 26 
 27 
 28 $IdCard.IsIdCard = function (idcard)
 29 {
 30     var Errors = new Array
 31         (
 32             "通过",
 33             "身份证号码位数不对!",
 34             "身份证号码出生日期超出范围或含有非法字符!",
 35             "身份证号码校验错误!",
 36             "身份证地区非法!"
 37         );
 38     var idcard, Y, JYM;
 39     var S, M;
 40     var idcard_array = new Array();
 41     idcard_array = idcard.split("");
 42     //地区检验
 43     if ($IdCard.GetIdCardArea(idcard) == false) return Errors[4];
 44 
 45     //身份号码位数及格式检验
 46     switch (idcard.length)
 47     {
 48         case 15:
 49             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))
 50             {
 51                 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}$/; //测试出生日期的合法性
 52             } else
 53             {
 54                 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}$/; //测试出生日期的合法性
 55             }
 56             if (ereg.test(idcard)) return Errors[0];
 57             else return Errors[2];
 58             break;
 59         case 18:
 60             //18位身份号码检测
 61             //出生日期的合法性检查
 62             //闰年月日:((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]))
 63             //平年月日:((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]))
 64             if (parseInt(idcard.substr(6, 4)) % 4 == 0 || (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6, 4)) % 4 == 0))
 65             {
 66                 ereg = /^[1-9][0-9]{5}(19|20)[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]$/; //闰年出生日期的合法性正则表达式
 67             } else
 68             {
 69                 ereg = /^[1-9][0-9]{5}(19|20)[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]$/; //平年出生日期的合法性正则表达式
 70             }
 71             if (ereg.test(idcard))
 72             {//测试出生日期的合法性
 73                 //计算校验位
 74                 S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10])) * 7
 75                         + (parseInt(idcard_array[1]) + parseInt(idcard_array[11])) * 9
 76                         + (parseInt(idcard_array[2]) + parseInt(idcard_array[12])) * 10
 77                         + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5
 78                         + (parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8
 79                         + (parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4
 80                         + (parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2
 81                         + parseInt(idcard_array[7]) * 1
 82                         + parseInt(idcard_array[8]) * 6
 83                         + parseInt(idcard_array[9]) * 3;
 84                 Y = S % 11;
 85                 M = "F";
 86                 JYM = "10X98765432";
 87                 M = JYM.substr(Y, 1); //判断校验位
 88                 if (M == idcard_array[17]) return Errors[0]; //检测ID的校验位
 89                 else return Errors[3];
 90             }
 91             else return Errors[2];
 92             break;
 93         default:
 94             return Errors[1];
 95             break;
 96     }
 97     return true;
 98 }
 99 
100 $IdCard.IsIdCard('身份证号码');
View Code

参考贡献://http://www.cnblogs.com/xjyggd/archive/2008/08/20/1271954.html

PS:做了一个简单的修改,兼容19XX-20XX的年份。

posted @ 2021-06-08 11:10  统哥  阅读(1424)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3