详解正则表达式实现二代身份证号码验证[通俗易懂]

详解正则表达式实现二代身份证号码验证[通俗易懂]二代身份证号码:1-6位:表示行政区划的代码。1、2位,所在省(直辖市,自治区)代码;3、4位,所在地级市(自治州)代码;5、6位,所在区(县,自治县,县级市)的代码;7-14位:表示出生年、月、日15-16位:所在地派出所代码17位:性别。奇数(1、3、5、7、9)男性,偶数(2、4、6、8、0)女性18位:校验位,存在十一个值:0,1,2,3,4,5,6,7,8,9,X,其值…

大家好,又见面了,我是你们的朋友全栈君。

二代身份证号码:
1-6位:表示行政区划的代码。
1、2位,所在省(直辖市,自治区)代码;
3、4位,所在地级市(自治州)代码;
5、6位,所在区(县,自治县,县级市)的代码;
7-14位:表示出生年、月、日
15-16位:所在地派出所代码
17位:性别。奇数(1、3、5、7、9)男性,偶数(2、4、6、8、0)女性
18位:校验位,存在十一个值:0,1,2,3,4,5,6,7,8,9,X,其值是用固定公式根据前面十七位计算出来的。

IdCodeValid: function(code) { 
   
                //身份证号合法性验证 
                //支持15位和18位身份证号 
                //支持地址编码、出生日期、校验位验证 
                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 row = { 
   
                    'pass': true,
                    'msg': '验证成功'
                };
                if (!code || !/^\d{ 
   6}(18|19|20)?\d{ 
   2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{ 
   3}(\d|[xX])$/.test(code)) { 
   
                    row = { 
   
                        'pass': false,
                        'msg': '身份证号格式错误'
                    };
                } else if (!city[code.substr(0, 2)]) { 
   
                    row = { 
   
                        'pass': false,
                        'msg': '身份证号地址编码错误'
                    };
                } else { 
   
                    //18位身份证需要验证最后一位校验位 
                    if (code.length == 18) { 
   
                        code = code.split('');
                        //∑(ai×Wi)(mod 11) 
                        //加权因子 
                        var factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
                        //校验位 
                        var parity = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2];
                        var sum = 0;
                        var ai = 0;
                        var wi = 0;
                        for (var i = 0; i < 17; i++) { 
   
                            ai = code[i];
                            wi = factor[i];
                            sum += ai * wi;
                        }
                        if (parity[sum % 11] != code[17].toUpperCase()) { 
   
                            row = { 
   
                                'pass': false,
                                ,
                                'msg': '身份证号校验位错误',
                            };
                        }
                    }
                }
                return row;
            };
            IdCodeValid('xxx');
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153620.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • # 安装MySQL8.0.25后,出现“Exception: Current profile has no WMI enabled”错误解决方案

    # 安装MySQL8.0.25后,出现“Exception: Current profile has no WMI enabled”错误解决方案问题描述最近更新MySQL到8.0.25版本后,查看ServerStatus,出现“Exception:CurrentprofilehasnoWMIenabled”错误,出于人的惰性,直接baidu->google->stackoverflow->oracle…然而找到的办法大多是提示:OpenMySQLWorkbenchclickon“ManageServerInstances”under“ServerAdministration”column

    2022年5月31日
  • gcc查看当前的版本并升级[通俗易懂]

    gcc查看当前的版本并升级[通俗易懂]1.gcc查看版本:gcc-vMacBook-Pro:$gcc-vConfiguredwith:–prefix=/Library/Developer/CommandLineTools/usr–with-gxx-include-dir=/usr/include/c++/4.2.1AppleLLVMversion7.0.0(clang-700.1.76)Tar…

    2022年6月26日
  • C++多线程通信_c++ socket 多线程

    C++多线程通信_c++ socket 多线程参考:https://m.imooc.com/article/289630C++11标准库新引入的线程库https://www.jianshu.com/p/e5a3498ba930(一)多线程编程#include<iostream>#include<thread>#include<mutex>#include<condi…

    2022年10月6日
  • 常用数据库端口号总结

    关系型数据库:1.Oracle数据库默认端口号为,1521;2.MySQL数据库默认端口号为,3306;3.SQLServer数据库默认端口号为,1433;4.postgreSQL数据库默认端口号为,5432;NOSQL数据库:1.MongoDB默认端口号为:27017;2.Redis默认端口号为:6379;3.memcached默认端口号为:11211;…

    2022年4月6日
  • 微型四旋翼飞行器设计经验之瞎扯淡[通俗易懂]

    在正式开始记录微型四旋翼飞行器设计的学习笔记之前,感觉自己很有必要先给自己一个总结,也希望能够帮到更多的朋友少走弯路(虽然不知道帮助大不大)。去年九月下旬开始了微型四旋翼飞行器的学习与设计,在12月底的时候初步实现了稳定的遥控与飞行,后续又增加了一些常规的辅助的功能,失控保护、姿态微调等等,之后又利用OLED屏幕,设计了一个三级菜单,把各种参数的设置,飞控锁定与通讯的状态等等一些信息都整合在一

    2022年4月10日
  • winform 自定义控件_adratator控件

    winform 自定义控件_adratator控件有很多时候,开发winform,系统给的控件往往不能满足需求,所以,

    2022年10月21日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号