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 简单验证长度 /// < ...
随机推荐
- Python 关于列表字典的键值修改
list (修改列表的索引值) 循环一个列表时,最好不要对原列表有改变大小的操作,这样会影响你的最终结果. #使用负索引进行修改列表 print('First') lis = [11, 22, 33, ...
- JVM垃圾收集算法之标记算法
前言 总所周知,jvm的垃圾收集算法一般包括标记.清除.整理三个阶段,最近在看了有关于垃圾收集的标记算法,记录一下自己的理解. 垃圾收集中标记算法有两种:一种是引用计数法,一种是根搜索算法. 引用记数 ...
- 1.2 管理 NetBackup 许可证
关于管理 NetBackup 许可证 NetBackup许可证密钥是在安装软件时添加的.对于需要单独购买的选件,可以稍 后在"许可证密钥"对话框中添加许可证. 注意:在进行任何许可 ...
- .net反射机制的简单介绍
1.什么是反射 Reflection,中文翻译为反射. 这是.Net中获取运行时类型信息的方式,.Net的应用程序由几个部分: ‘程序集(Assembly)’.‘模块(Module)’.‘类型(cl ...
- Gym100739H Hard Molecules
Hard Molecules 给定一个连通图中每个点的度数,求一个满足条件的图,图可以有重边,不能有自环. n<=5000, di<=109 题解 如果不要求图连通,那么只需要判断 \[ ...
- Q-learning和Sarsa的区别
Q-learning是off-policy,而Sarsa是on-policy学习. Q-learning在更新Q table时,它只会需要Q值最大,但是不一定会选择使这个Q值最大的动作,因为选择哪个动 ...
- 如何使用h5py读入数据
在网上找到的方法,如下: import h5py import numpy as np #HDF5的写入: imgData = np.zeros((2,4)) f = h5py.File('HDF5_ ...
- Dart 库预览
容导航 dart:core - numbers, collections, strings, and more dart:async - asynchronous programming dart:m ...
- tomcat和apache的区别--http server vs application server
1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...
- Python 检查代码占用内存 工具和模块
只介绍简单的使用, 更多使用方法请查看官方文档 tracemalloc 官方文档 tracemalloc文档地址 使用 import tracemalloc tracemalloc.start() # ...