//身份证号验证
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. Android的PVPlayer介绍

    1 Player的组成 OpenCore的Player的编译文件是pvplayer/Android.mk,将生成动态库文件 libopencoreplayer.so.这个库包括了双方面的内容:一方是P ...

  2. [Example of Sklearn] - Example

    reference : http://my.oschina.net/u/175377/blog/84420 目录[-] Scikit Learn: 在python中机器学习 载入示例数据 一个改变数据 ...

  3. Visual Studio 2012以后无法保存只读文件的问题

    https://stackoverflow.com/questions/12497216/visual-studio-2012-will-not-save-overwrite-read-only-fi ...

  4. 左右RAC CRS 自己主动启动

    左右CRS自己主动重新启动实验 一.检验ASM [root@rac1 ~]# /etc/init.d/oracleasm status Checking if ASM is loaded: yes C ...

  5. PHP正则表达式入门教程[转]

      思维导图 点击下图,可以看具体内容!     介绍          正则表达式,大家在开发中应该是经常用到,现在很多开发语言都有正则表达式的应用,比如javascript,java,.net,p ...

  6. NYOJ 24 素数的距离问题

    素数的距离问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描写叙述 如今给出你一些数.要求你写出一个程序,输出这些整数相邻近期的素数,并输出其相距长度.假设左右有等距离长 ...

  7. 常见的选择&lt;数据源协议,委托协议&gt;(IOS发展)

    -常见的选择必须满足这两个协议,约定实施.一个为数据源协议 -托付协议负责控制控件UI.事件响应, 实现可选 -数据源协议负责控件与应用数据模型的桥梁,一般必须实现 @interface ViewCo ...

  8. 3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子

    原文:3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子 3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子   所用的软件 3ds Max 9.0,Mic ...

  9. 构建自己的PHP框架(邮件发送)

    完整项目地址:https://github.com/Evai/Aier 我们采用 'nette/mail' 包作为我们的邮件发送基础模块,在它的基础上封装一个 'Mail' 类,暴露出简洁的 API ...

  10. 让你的sublime text写C代码 (sublime text 2 配置构建C开发环境)

    原则 1. 首先你要配置能够编译C++/C环境 2. window中配置该执行环境的环境变量,能够全局使用 3. sublime Text创建新的构建机制.并设置用改全局编译环境 具体过程 能够编译C ...