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 简单验证长度 /// < ...
随机推荐
- 专注产品真正价值:iWALK真无线蓝牙耳机体验评测
写在前面 大家好,欢迎收看图南指北.我是司图南. 要问我 2019 年3C 数码领域最火的产品是什么?真无线蓝牙耳机绝对要排在前三位.随着苹果airpods挂起的旋风,市面上的真无线耳机迅速产生了两极 ...
- js--获取和设置css属性
在这一章我们讲述一下如何通过js来操作css中的属性 1,首先,我们想获取元素的一些属性.例如innerHTML,value等值时,我们可以 var object=document.getELemen ...
- 【大数据】虚拟机网络配置-CentOS
cd /etc/sysconfig/network-scripts/ vi ifcfg-enoXXXX vi /etc/hostname
- jsp request对象
getParameter( ) :返回name指定参数的参数值 String[] getParameterValues(String name) :返回包含参数name的所有值的数值 getA ...
- EasyExcel引入
好久没更了,都在有道云上面记录,没时间搬过来. easyexcel是最近项目做优化涉及的一个改善点吧. 简介 导出是后台管理系统的常用功能,当数据量特别大的时候会内存溢出和卡顿页面,曾经自己封装过一个 ...
- 小程序SetData
- react生命周期钩子函数
render在更新阶段和挂在阶段都会执行 class App extends Component { render() { return ( <div> <h1>reacet生 ...
- podium服务器端的微前端开发框架
podium 是一个比较全的微前端开发框架. 具有以下特性 自治开发 强大的组合能力 基于约定的开发模式 podium 包含的组件 podlets 页面片段,是一个独立的http 服务,独立运行的,实 ...
- 3495: PA2010 Riddle 2-sat 前缀优化
3495: PA2010 Riddle 2-sat 前缀优化 链接 bzoj 思路 不想说啥了,看hwim的吧,我去睡觉了zZ. 代码 /******************************* ...
- 洛谷 P3371【模板】单源最短路径(弱化版)
题面 既然是模板, 那就直接贴代码? 两种思路 1.迪杰斯特拉 #include <cstdio> #include <cstring> #include <iostre ...