php 身份证验证类
<?php //身份证件验证
class chekcIdcard
{
/**
* 验证身份证是否有效
*
* @param $IDCard
* @return bool
*/
public static function validateIDCard($IDCard)
{
if (strlen($IDCard) == 18) {
return self::check18IDCard($IDCard);
} elseif ((strlen($IDCard) == 15)) {
$IDCard = self::convertIDCard15to18($IDCard);
return self::check18IDCard($IDCard);
} else {
return false;
}
} //计算身份证的最后一位验证码,根据国家标准GB 11643-1999
private static function calcIDCardCode($IDCardBody)
{
if (strlen($IDCardBody) != 17) {
return false;
}
//加权因子
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
//校验码对应值
$code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$checksum = 0; for ($i = 0; $i < strlen($IDCardBody); $i++) {
$checksum += substr($IDCardBody, $i, 1) * $factor[$i];
} return $code[$checksum % 11];
} // 将15位身份证升级到18位
private static function convertIDCard15to18($IDCard)
{
if (strlen($IDCard) != 15) {
return false;
} else {
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
if (array_search(substr($IDCard, 12, 3), array('996', '997', '998', '999')) !== false) {
$IDCard = substr($IDCard, 0, 6) . '18' . substr($IDCard, 6, 9);
} else {
$IDCard = substr($IDCard, 0, 6) . '19' . substr($IDCard, 6, 9);
}
}
$IDCard = $IDCard . self::calcIDCardCode($IDCard);
return $IDCard;
} // 18位身份证校验码有效性检查
private static function check18IDCard($IDCard)
{
if (strlen($IDCard) != 18) {
return false;
} $IDCardBody = substr($IDCard, 0, 17); //身份证主体
$IDCardCode = strtoupper(substr($IDCard, 17, 1)); //身份证最后一位的验证码 if (self::calcIDCardCode($IDCardBody) != $IDCardCode) {
return false;
} else {
return true;
}
}
}
使用方法
$chekcIdcard = new chekcIdcard();
var_dump($chekcIdcard->validateIDCard('110101199003072033'));
echo '<br>';
var_dump($chekcIdcard->validateIDCard('110101199003072031'));
php 身份证验证类的更多相关文章
- js身份证验证类
var IDCard = function () { //---------------------------------------------------------- // 功能:根据身份证号 ...
- 做一个牛XX的身份证号验证类(支持15位和18位)
原文:做一个牛XX的身份证号验证类(支持15位和18位) #region 是否合法的中国身份证号码 protected bool IsChineseID() { if (str.Length == 1 ...
- php表单数据验证类
非常好用方便的表单数据验证类 <?php //验证类 class Fun{ function isEmpty($val) { if (!is_string($val)) return false ...
- JS表单验证类HTML代码实例
以前用的比较多的一个JS表单验证类,对于个人来说已经够用了,有兴趣的可以在此基础上扩展成ajax版本.本表单验证类囊括了密码验证.英文4~10个 字符验证. 中文非空验证.大于10小于100的数字.浮 ...
- 一个PHP常用表单验证类(基于正则)
一个基于正则表达式的PHP常用表单验证类,作者:欣然随风.这个表单判断类的功能有:验证是否为指定长度的字母/数字组合.验证是否为指定长度汉字.身 份证号码验证.是否是指定长度的数字.验证邮件地址.电话 ...
- 【NumberValidators】大陆身份证验证
需要说明的是这里的大陆身份证识别并不是公安局联网的识别,而是按国标GB 11643进行的验证,所以其验证结果只能说符合国标规范,但不能保证该身份证一定真实存在,如果你实际需求是希望身份证一定真实存在, ...
- Java正则表达式实现港、澳、台身份证验证
最近由于业务的要求,需要进行港.澳.台人员身份证验证,现在直接上代码,经供参考学习,也为自己积累一些工具类: package com.qiu.validate; public class regexV ...
- java 身份证工具类
package com.app.wx.common.util; import org.apache.commons.lang3.StringUtils; import java.text.ParseE ...
- .NET身份证验证
身份证号码编码规则及校验位校验算法 算法地址:http://jingyan.baidu.com/article/7f41ececff944a593d095c8c.html 简单验证长度 /// < ...
随机推荐
- round.606.div2
A. Happy Birthday, Polycarp! 这个题意我确实没有看懂. 沃日,我懂了,我感觉我似乎都能切掉这题. B. Make Them Odd 这个我也能看懂.
- linux学习12 bash的常见特性及文本查看命令实战
一.回顾 1.FHS,命令及bash命令历史 a.FHS: /bin,/sbin,/lib,/lib64,/etc /home,/root /boot /media,/mnt /proc,/sys / ...
- date -d
date -d ‘2 days ago’ //显示2天以前的时间date -d ‘60 second ago’ //显示60秒以前的时间 date -d '3 months 1 day' //显示3月 ...
- 用于C#的极速序列化/反序列工具 MessagePack
MessagePack 比MsgPack-Cli快10倍,并且优于其他C#序列化器.MessagePack for C#还内置了对LZ4压缩的支持 - 一种极快的压缩算法.对于性能追求很重要,特别是在 ...
- nginx 访问控制之 location
在生产环境中,我们会对某些特殊的请求进行限制,比如对网站的后台进行限制访问. 这就用到了location配置. 示例1: location /aming/ { deny all; } 说明:针对/am ...
- bzoj 3585 mex - 线段树 - 分块 - 莫队算法
Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. Input 第一行n,m. 第二行为n个数. 从第三行开始,每行一个询问 ...
- Excel中筛选两个表中相同的数据和快速填充一列的公式
将两个工作表放在一个文件中,使用if函数和countif函数判断 =if(判断条件countif(区域,条件),真值,[假值]) 实例 =if(countif(Sheet2!$A$1:$A$44,A2 ...
- c++笔试题 已迁移完成
转载 1.C和C++的特点与区别? 答:(1)C语言特点:1.作为一种面向过程的结构化语言,易于调试和维护: 2.表现能力和处理能力极强,可以直接访问内存的物理地址: 3.C语言实现了对硬件的编程操作 ...
- Elasticsearch与Solr优缺点比较
Elasticsearch简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据. 它可以用于全文搜索,结构化搜索以及分析,也可以将这三者进行组 ...
- Redis的内存回收策略和内存上限(阿里)
还有一篇文章 讲解guava如何删除过期数据的,与redis不同,guava没有维护线程删除过期key,只是在设置 key 或者 读取key的时候,顺带删除参考:GuavaCache简介(一)是轻量级 ...