//身份证号验证
03
protected function checkIdCard(){
04
if(empty($_POST['idcard'])){
05
return false;
06
}
07
$idcard = $_POST['idcard'];
08
$City = array(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=>"国外");
09
$iSum = 0;
10
$idCardLength = strlen($idcard);
11
//长度验证
12
if(!preg_match('/^\d{17}(\d|x)$/i',$idcard) and!preg_match('/^\d{15}$/i',$idcard))
13
{
14
return false;
15
}
16
//地区验证
17
if(!array_key_exists(intval(substr($idcard,0,2)),$City))
18
{
19
return false;
20
}
21
// 15位身份证验证生日,转换为18位
22
if ($idCardLength == 15)
23
{
24
$sBirthday = '19'.substr($idcard,6,2).'-'.substr($idcard,8,2).'-'.substr($idcard,10,2);
25
$d = new DateTime($sBirthday);
26
$dd = $d->format('Y-m-d');
27
if($sBirthday != $dd)
28
{
29
return false;
30
}
31
$idcard = substr($idcard,0,6)."19".substr($idcard,6,9);//15to18
32
$Bit18 = getVerifyBit($idcard);//算出第18位校验码
33
$idcard = $idcard.$Bit18;
34
}
35
// 判断是否大于2078年,小于1900年
36
$year = substr($idcard,6,4);
37
if ($year<1900 || $year>2078 )
38
{
39
return false;
40
}
41 42
//18位身份证处理
43
$sBirthday = substr($idcard,6,4).'-'.substr($idcard,10,2).'-'.substr($idcard,12,2);
44
$d = new DateTime($sBirthday);
45
$dd = $d->format('Y-m-d');
46
if($sBirthday != $dd)
47
{
48
return false;
49
}
50
//身份证编码规范验证
51
$idcard_base = substr($idcard,0,17);
52
if(strtoupper(substr($idcard,17,1)) != getVerifyBit($idcard_base))
53
{
54
return false;
55
}
56
return $_POST['idcard'];
57
}
58 59
// 计算身份证校验码,根据国家标准GB 11643-1999
60
function getVerifyBit($idcard_base)
61
{
62
if(strlen($idcard_base) != 17)
63
{
64
return false;
65
}
66
//加权因子
67
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
68
//校验码对应值
69
$verify_number_list = array('1', '0', 'X', '9', '8', '7', '6', '5', '4','3', '2');
70
$checksum = 0;
71
for ($i = 0; $i < strlen($idcard_base); $i++)
72
{
73
$checksum += substr($idcard_base, $i, 1) * $factor[$i];
74
}
75
$mod = $checksum % 11;
76
$verify_number = $verify_number_list[$mod];
77
return $verify_number;
78
}

php身份证号的验证的更多相关文章

  1. js实现完美身份证号有效性验证

    最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个 ...

  2. js实现完美身份证号有效性验证(转)

    转载自:http://www.cnblogs.com/lzrabbit/archive/2011/10/23/2221643.html 最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验 ...

  3. js身份证号有效性验证

    1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用户名和身份证号就可以实名 ...

  4. 【C#】身份证号正确性验证及正则表达式格式验证

    身份证前两位各省对应的编号是: 1.华北地区:北京市|11,天津市|12,河北省|13,山西省|14,内蒙古自治区|15: 2.东北地区: 辽宁省|21,吉林省|22,黑龙江省|23: 3.华东地区: ...

  5. 锋利的js之验证身份证号

    我们在做互联网网站时,注册个人资料时,经常要用到身份证号,我们需要对身份证进验证,不然别人随便输个号码就通过,让你感觉这个网站做得很shit. 身份证号是有规则的. 结构和形式 1.号码的结构  公民 ...

  6. 身份证号验证js程序

    最近注册一个网站,居然让我输入个人身份证号,身份证号是个人信息,怎么能告诉你呢? 输入正确的身份证号没有任何问题. 我就仅仅改了最后一位,就告诉我身份证号不对,你是怎么知道的呢?所以,搜了下身份证号的 ...

  7. 身份证号校验原理及JavaScript实现

          在网站中,总有各种各样的表单,用户使用表单来向服务器发送数据,进行交互. 然而,代代相传的经验是,永远不要信任用户的输入,一定要对数据进行验证.如果使用不经验证的表单,轻则会有大量无效提交 ...

  8. JavaScript身份证号码有效性验证

    最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个 ...

  9. C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编

      验证电话号码的主要代码如下: public bool IsTelephone(string str_telephone) { return System.Text.RegularExpressio ...

随机推荐

  1. LVS实现负载均衡原理及安装配置

    LVS实现负载均衡原理及安装配置 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群.常用的负载均衡开源软件有nginx.lvs.haproxy,商业的硬件负载均衡设备F ...

  2. winform - FixedDialog

    可以设置form的属性: 窗口样式: MaximizeBox  :  false       去掉 方法 按钮 MinimizeBox  :  false       去掉 缩小到任务栏 的按钮 禁止 ...

  3. NS2网络模拟(6)-homework02.tcl

    1: #NS2_有线部分\homework02.tcl 2: 3: #Create a simulator object 4: set ns [new Simulator] 5: 6: #Define ...

  4. SecureCRT自动登录Linux并设置时间

    #$language = "VBScript" #$interface = "1.0" crt.Screen.Synchronous = True ' This ...

  5. uva 11346 - Probability(可能性)

    题目链接:uva 11346 - Probability 题目大意:给定x,y的范围.以及s,问说在该范围内选取一点,和x,y轴形成图形的面积大于s的概率. 解题思路:首先达到方程xy ≥ s.即y ...

  6. getResources()方法

    今天做一个Android文件管理器.它使用了很多当地的用途getResources. Drawable currentIcon = null;        ------        current ...

  7. Apache 配置 HTTPS访问

    将需要配置的项目移动到另一根目录下,作为https访问位置. 修改bitnami配置文件..\Bitnami\wampstack-5.6.19-0\apache2\conf\bitnami\bitna ...

  8. go与java互用的AES实现

    终于实现了go与java互用的AES算法实现.基于go可以编译windows与linux下的命令行工具,十分方便. Java源码 import java.security.GeneralSecurit ...

  9. xmpp和OpenFire示例,即时聊天室,支持离线消息

    让我说说为什么写这个博客,这是因为我在上周末的研究XMPP和OpenFire,从互联网上下载Demo,但跑不起来.它花了很长的时间.它被改造.抬高.篇博文也是希望后边学习XMPP和OpenFire的同 ...

  10. C# WebClient的使用

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...