php身份证号的验证
//身份证号验证
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身份证号的验证的更多相关文章
- js实现完美身份证号有效性验证
最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个 ...
- js实现完美身份证号有效性验证(转)
转载自:http://www.cnblogs.com/lzrabbit/archive/2011/10/23/2221643.html 最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验 ...
- js身份证号有效性验证
1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用户名和身份证号就可以实名 ...
- 【C#】身份证号正确性验证及正则表达式格式验证
身份证前两位各省对应的编号是: 1.华北地区:北京市|11,天津市|12,河北省|13,山西省|14,内蒙古自治区|15: 2.东北地区: 辽宁省|21,吉林省|22,黑龙江省|23: 3.华东地区: ...
- 锋利的js之验证身份证号
我们在做互联网网站时,注册个人资料时,经常要用到身份证号,我们需要对身份证进验证,不然别人随便输个号码就通过,让你感觉这个网站做得很shit. 身份证号是有规则的. 结构和形式 1.号码的结构 公民 ...
- 身份证号验证js程序
最近注册一个网站,居然让我输入个人身份证号,身份证号是个人信息,怎么能告诉你呢? 输入正确的身份证号没有任何问题. 我就仅仅改了最后一位,就告诉我身份证号不对,你是怎么知道的呢?所以,搜了下身份证号的 ...
- 身份证号校验原理及JavaScript实现
在网站中,总有各种各样的表单,用户使用表单来向服务器发送数据,进行交互. 然而,代代相传的经验是,永远不要信任用户的输入,一定要对数据进行验证.如果使用不经验证的表单,轻则会有大量无效提交 ...
- JavaScript身份证号码有效性验证
最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个 ...
- C#中使用正则表达式验证电话号码、手机号、身份证号、数字和邮编
验证电话号码的主要代码如下: public bool IsTelephone(string str_telephone) { return System.Text.RegularExpressio ...
随机推荐
- 【21.21%】【codeforces round 382D】Taxes
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- oc面试攻略
原文出自:http://mobile.51cto.com/iphone-402619.htm 1.Object-C有多继承吗?没有的话用什么代替?cocoa 中所有的类都是NSObject 的子类 多 ...
- git 合并本地分支到远程分支
第一种方法: git 快速合并本地分支到远程分支1.git branch -a 查看所有分支2.git checkout origin/分支名称3.git checkout 分支名称完成 ------ ...
- .NET基础拾遗
原帖地址: http://www.cnblogs.com/edisonchou/p/4787775.html
- struts2 no extension(excludePattern)
采用struts2 小伙伴非常希望更改或删除action扩展,本文将帮助你实现 struts2-core-2.3.16.jar , 下载链接: http://repo1.maven.org/maven ...
- MongoDB 可视化管理工具
MongoDB 可视化管理工具 (2011年10月-至今) 正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡.MongoCola这 ...
- 乞讨 间隔[a,b]在见面p^k*q*^m(k>m)中数号码
标题叙述性说明: 1<=a,b<=10^18,p,q他们是素数 2<=p,q<=10^9; 求在[a,b]内能够表示为 x*p^k*q^m k > m 的数的个 ...
- SVN使用教程(基于SAE)
TortoiseSVN is an easy-to-use SCM / source control software for Microsoft Windows and possibly the b ...
- silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发) 本教程基本涵盖了WPF和silverlight中的各种动画.先上张效果图. 声明下,这个做的不是让大家照搬的,只是 ...
- 【剑指Offer学习】【面试题4 : 替换空格】
题目: 请实现一个函数,把字符串中的每个空格替换成"%20",例如“We are happy.”,则输出“We%20are%20happy.”. 以下代码都是通过PHP代码实现. ...