Foxtable(狐表)用户栏目专家坐堂 → 前端按钮点击后js判断身份证合法?点击没有效果?


  共有5813人关注过本帖树形打印复制链接

主题:前端按钮点击后js判断身份证合法?点击没有效果?

帅哥哟,离线,有人找我吗?
cnsjroom
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
前端按钮点击后js判断身份证合法?点击没有效果?  发帖心情 Post By:2022/8/2 14:00:00 [只看该作者]

({
    button2: {
        text: '{{text}}',
        //系统自动匹配标题
        visible: true,
        click: function() { //按钮单击事件
            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 : "国外"
            };

            var card = e.form.身份证号.value;

            //是否为空
            function Card(Card) {
                if (card === '') {
                    alert('证件号码不能为空!');
                    return false;
                }
                //校验长度,类型
                if (isCardNo(card) === false) {
                    alert('您输入的证件号码不正确,请重新输入');
                    return false;
                }
                //检查省份
                if (checkProvince(card) === false) {
                    alert('您输入的证件号码不正确,请重新输入');
                    return false;
                }
                //校验生日
                if (checkBirthday(card) === false) {
                    alert('您输入的证件号码生日不正确,请重新输入');
                    return false;
                }
                //检验位的检测
                if (checkParity(card) === false) {
                    alert('您的证件号码校验位不正确,请重新输入');
                    return false;
                }

                return true;

                Card(Card)
            }
            //检查号码是否符合规范,包括长度,类型
            isCardNo = function(card) {
                //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
                var reg = /(^d{15}$)|(^d{17}(d|X)$)/;
                if (reg.test(card) === false) {
                    return false;
                }

                return true;
            };

            //取身份证前两位,校验省份
            checkProvince = function(card) {
                var province = card.substr(0, 2);
                if (vcity[province] == undefined) {
                    return false;
                }
                return true;
            };

            //检查生日是否正确
            checkBirthday = function(card) {
                var len = card.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 = card.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 = card.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 >= 3 && time <= 100) {
                        return true;
                    }
                    return false;
                }
                return false;
            };

            //校验位的检测
            checkParity = function(card) {
                //15位转18位
                card = changeFivteenToEighteen(card);
                var len = card.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 += card.substr(i, 1) * arrInt[i];
                    }
                    valnum = arrCh[cardTemp % 11];
                    if (valnum == card.substr(17, 1)) {
                        return true;
                    }
                    return false;
                }
                return false;
            };

            //15位转18位身份证号
            changeFivteenToEighteen = function(card) {
                if (card.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;
                    card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
                    for (i = 0; i < 17; i++) {
                        cardTemp += card.substr(i, 1) * arrInt[i];
                    }
                    card += arrCh[cardTemp % 11];
                    return card;
                }
                return card;
            };

        }
    }
})

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/2 14:04:00 [只看该作者]

这种只能打开开发者工具,自己调试了

 回到顶部
帅哥哟,离线,有人找我吗?
浙江仔
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1326 积分:9609 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2022/8/2 16:45:00 [只看该作者]

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:身份证号码校验js.txt

用这个试试

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(浙江仔)[upload=txt,身份证号码校验js.txt]v...  发帖心情 Post By:2022/8/3 9:09:00 [只看该作者]

测试了一下   输入错误身份证号与正确的证号  都提示alert("身份证号码不规范"); 这个消息  有没有办法修正呢?

 回到顶部
帅哥,在线噢!
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/3 9:27:00 [只看该作者]

建议调用现成的身份证校验接口判断,各大平台如阿里,腾讯,甚至公安部都有提供这种接口

 回到顶部
帅哥哟,离线,有人找我吗?
cnsjroom
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:七尾狐 帖子:1571 积分:11238 威望:0 精华:0 注册:2021/1/17 17:06:00
回复:(有点蓝)建议调用现成的身份证校验接口判断,...  发帖心情 Post By:2022/8/3 10:26:00 [只看该作者]

因是内网使用  无法链接外网api接口  所以有点小麻烦

 回到顶部
帅哥,在线噢!
有点蓝
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:111414 积分:567140 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/3 10:38:00 [只看该作者]

使用ajax把身份证号码发到服务端判断

 回到顶部
帅哥哟,离线,有人找我吗?
浙江仔
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1326 积分:9609 威望:0 精华:1 注册:2010/7/21 14:20:00
  发帖心情 Post By:2022/8/3 11:46:00 [只看该作者]

以下是引用cnsjroom在2022/8/3 9:09:00的发言:
测试了一下   输入错误身份证号与正确的证号  都提示alert("身份证号码不规范"); 这个消息  有没有办法修正呢?

这个js我使用过大半年,没有出现这个问题,你要调试一下你自己的代码,是不是用错了


 回到顶部