`
moqiang02
  • 浏览: 523890 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
文章分类
社区版块
存档分类
最新评论

php表单提交时的身份证号码验证

 
阅读更多
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
        <title>
            Check card no
        </title>
        <script type='text/javascript'>
            /*Author:yufulongBlog:http://www.xiaoxiaozi.com*/
            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 : "国外"
            };
            checktheform = function() {
                var card = document.getElementById('card_no').value;
                //是否为空    
                if (card === '') {
                    alert('请输入身份证号,身份证号不能为空');
                    document.getElementById('card_no').focus;
                    return false;
                }
                //校验长度,类型    
                if (isCardNo(card) === false) {
					//直接改变文本框后面的提示信息,而不是使用alert()弹窗
                    document.getElementById('sfz').innerHTML = '您输入的身份证号码不正确,请重新输入';
                    document.getElementById('card_no').focus;
                    return false;
                }
                //检查省份    
                if (checkProvince(card) === false) {
                    alert('您输入的身份证号码不正确,请重新输入');
                    document.getElementById('card_no').focus;
                    return false;
                }
                //校验生日    
                if (checkBirthday(card) === false) {
                    alert('您输入的身份证号码生日不正确,请重新输入');
                    document.getElementById('card_no').focus();
                    return false;
                }
                //检验位的检测    
                if (checkParity(card) === false) {
                    alert('您的身份证校验位不正确,请重新输入');
                    document.getElementById('card_no').focus();
                    return false;
                }
                alert('OK');
                return true;
            };
            //检查号码是否符合规范,包括长度,类型
            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;
            };
        </script>
    </head>
    
    <body>
        <form name="form1" method="post" action="">
            <label>
                身份证号<input name='card_no' type='text' id='card_no' onBlur='javascript:checktheform();'/>
				<em id="sfz">请输入正确的身份证号码</em>
            </label>
			<br/>
            <label>
                <input type="submit" name="Submit" value="提交">
            </label>
        </form>
    </body>

</html>

分享到:
评论

相关推荐

    php验证身份证号码正确性的函数

    身份证验证最简单的就是判断长度了,当然这种非常简单破了如果要更规则一点我们需要对身份证号码进行一些按生成规则验证了,下面整理了一些函数我们来看看。 例子,今天分享一个php验证身份证号码是否正确函数. /***...

    PHP验证日常格式(Email,手机号码,身份证号码等)

    PHP验证日常格式(Email,手机号码,身份证号码等),验证多种网站常用格式

    jQuery多功能注册表单验证插件代码

    功能介绍:jQuery多功能注册表单验证插件代码,能够验证几乎所有字段,让你自定义错误提示的长度,提示内容,提示字体颜色,还能与php动态验证手机号或者用户名在数据库是否存在,还能验证身份证是否输入正确,还能配合短信...

    [示例][PHP]常用表单的PHP验证类.zip

    页面作用: 常用表单验证类, 验证是否为指定长度的字母/数字组合, 是否为指定长度数字, 是否为指定长度汉字, 验证身份证号码, 验证邮件地址, 验证电话号码

    JS正则表达式完美实现身份证校验功能

    1、只针对18为身份证号码进行校验,现在15位的应该很少了, 2、不区分xX大小写, 3、出生年份1900-2099,每月的天数也进行相关验证(考虑的闰月的情况), 4、校验规则详见,这个写的比较详细和清楚,相信看过后都可以...

    常用表单的PHP验证类.zip

    &lt;?php class class_post {  function fun_text1... }页面作用:常用表单验证类,验证是否为指定长度的字母/数字组合,是否为指定长度数字,是否为指定长度汉字,验证身份证号码,验证邮件地址,验证电话号码

    php封装的表单验证类完整实例

    //中文验证、邮箱验证、电话号码、手机、QQ、身份证、(由字母、数字、下划线组成,不能以数字开头) header('content-type:text/html;charset=utf-8'); class Form{ /* //中文验证的方法 //参数:$str,$num1,$num...

    精通正则表达式基于.NET ASP PHP JSP JavaScript

    ASPNETValidator/REIdentity.aspx 身份证号码格式验证 ASPNETValidator/REInt.aspx 整数格式验证 ASPNETValidator/RENumber.aspx 数值格式验证 ASPNETValidator/REPhone.aspx 电话号码格式...

    php验证是否是md5编码的简单代码

    php使用ereg验证文件上传的方法PHP生成图片验证码、点击切换实例PHP jQuery表单,带验证具体实现方法php实现加减法验证码代码php中filter函数验证、过滤用户输入的数据js和php邮箱地址验证的实现方法使用php验证复选...

    PHP程序开发范例宝典III

    实例116 验证身份证号码 174 实例117 验证护照编号 175 实例118 验证车牌号码 176 4.4 自定义验证 177 实例119 验证合法的数据表名称 178 实例120 验证货币类型 179 第5章 构建PHP动态网页 181 5.1 ...

    php常用的28个类,开发必备

    用户登录类,数据库操作类,目录类,声明一个身份证号码检查类,用PHP批量生成图片缩略图,PHP多文件上传类,分页类,php加密解密处理类,文件上传类,常用表单验证类 等等28个常用类集合

    random_numbers:产生一个随机号码. 用于所谓「云购」系统

    如果重复则自动重新生成.[隐患] 若随机数储存达到一定额度则资源消耗大幅上升.[功能] 将随机数写入数据库.[功能] 随机数与手机号码身份证号码等信息挂钩.[功能] 有手机号码验证.[功能] 有身份证号码验证.[缺陷] ...

    VeryIDE Bee 互动营销**台 v1.5 UTF-8.rar

    VeryIDE Bee 可以看作是 VeryIDE Apps 的升级版,针对用户体验、界面、第三方整合和模块机制作了...增加 "短信**台"目前适用于表单提交时给用户发送手机短信 增加 "怀旧经典"用户界面(VeryIDE Apps 风格)供用户设置

    Java-PHP正则表达式的使用

     评注:表单验证时很实用  匹配网址URL的正则表达式:[a-zA-z]+://[^s]*  评注:网上流传的版本功能很有限,上面这个基本可以满足需求  匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-...

    JavaScript网页特效范例宝典源码

    实例090 验证身份证号码 140 实例091 验证用户名和密码 142 实例092 验证车牌号码 144 实例093 验证网站地址 145 实例094 验证数量和金额 147 实例095 验证字符串是否以指定字符开头 149 实例096 限制输入字符串的...

    风越.net代码生成器 v3.5

    11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名加密,使输入控件的名称与字段名不同,防止他人从客户端HTML中猜解 ★ 14、支持列表、搜索页面对数据记录...

    风越asp代码生成器 V3.5

    11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名加密,使输入控件的名称与字段名不同,防止他人从客户端HTML中猜解 ★ 14、支持列表、搜索页面对数据记录...

    风越ASP代码生成器FireAspCreatorv2.9.rar

    11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名加密,使输入控件的名称与字段名不同,防止他人从客户端HTML中猜解 ★ 14、支持列表、搜索页面对数据记录...

    风越.Net代码生成器 [FireCode Creator] V1.3 精简版

    11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名加密,使输入控件的名称与字段名不同,防止他人从客户端HTML中猜解 ★ 14、支持列表、搜索页面对数据记录...

    风越.net代码生成器v2.9

    11、支持表单提交超过100KB的文本数据 ★ 12、支持多文件上载、修改、删除记录时同步删除文件 13、支持控件名加密,使输入控件的名称与字段名不同,防止他人从客户端HTML中猜解 ★ 14、支持列表、搜索页面对数据记录...

Global site tag (gtag.js) - Google Analytics