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

详解正则表达式实现二代身份证号码验证[通俗易懂]二代身份证号码: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • xcode armv6 armv7 armv7s arm64

    目前ios的指令集有以下几种:armv6iPhoneiPhone2iPhone3G第一代和第二代iPodToucharmv7iPhone4iPhone4Sarmv7siPhone5iPhone5Carm64iPhone5S 机器对指令集的支持是向下兼容的,因此armv7的指令集是可

    2022年4月7日
    41
  • PHP中的PEAR是什么?

    PHP中的PEAR是什么?

    2021年11月5日
    42
  • mysql 分区 varchar_MySQL分区总结

    mysql 分区 varchar_MySQL分区总结前言:分区是指根据一定的规则,数据库把一个表分解成多个更小的,更容易管理的部分。分区对应用来说是完全透明的,不影响应用的业务逻辑。MySQL分区的优点:1、和单个磁盘或者文件系统分区相比,可以存储更多数据;2、优化查询。在Where字句中包含分区条件时,可以只扫描必要的一个或多个分区来提高查询效率;同时在涉及SUM()和COUNT()等聚合函数的查询时,可以容易地在每个分区上并行处理,最终…

    2022年6月11日
    97
  • navicat激活码最新【2021最新】

    (navicat激活码最新)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~TR…

    2022年3月22日
    94
  • 分而治之,保持胜利果实

    分而治之,保持胜利果实

    2022年1月26日
    61
  • win10+cuda11.0+vs2019安装教程[通俗易懂]

    转自:https://www.jianshu.com/p/1fd15d2408bf?utm_campaign=hugo第一步:检查显卡支持的cuda版本1.第一种方法:win+R打开cmd,输入nvidia-smi,我的显卡是nvidia2070super,支持的cuda版本是11.0图1cmd查看显卡支持的cuda版本2.第二种方法:搜索框输入nvidia,出现nvidia控制面板,打开帮助中的系统信息,选择组件,出现cuda版本信息。第二步:安装vs2019.

    2022年4月12日
    584

发表回复

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

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