写了一个身份证号验证类,php小白,写的不好,欢迎各位大神给我多提意见和建议 身份证号分为四部分,第一部分是前6位为地址码,7-14位是出生日期,15-17位是同一地方同一天出生的男孩为奇数,女孩是偶数,第18位是校验码,校验码的计算是前17位数字各自乘以各自对应位置上的加权因子值并求和,所求得的和跟11取余,根据余数再通过换算表得出第18位的校验码值。下面是具体的实现代码:

 <?php
header("Content-type: text/html; charset=utf-8");
date_default_timezone_set("PRC");
class Check{
//判断身份证长度
private function judgelen($idcard){
if(strlen($idcard)==15){
return true;
}else if(strlen($idcard)==18){
return true;
}else{
return false;
}
} //删除空格
function trimall($str)
{
$str_pre=array(" "," ","\t","\n","\r");
$str_later=array("","","","","");
return str_replace($str_pre,$str_later,$str);
} //校验地址码
private function checkAddr($idcard){ $addrcode="\"".substr($idcard,0,6)."\"";
$cmd="find /c ".$addrcode." ./cityId.txt";//该文件是全国各地对应的地址码
//echo `find /c "610404" ./cityId.txt`;
if($this->trimall(shell_exec(trim($cmd)))=="----------./CITYID.TXT:0"){
return false;
}else{
return true;
}
} //判断出生日期
private function checkBorn($idcard){
$borncode=substr($idcard,6,8);
if((strtotime($borncode)?0:-1)==-1)
return false;
else
return true;
} //判断校验码
private function checkCode($idcard){
$sum=0;
$check_array = array("0"=>1,"1"=>0,"2"=>'X',"3"=>9,"4"=>8,"5"=>7,"6"=>1,"7"=>5,"8"=>4,"9"=>3,"10"=>2,);//X对应的换算表
$ai_array = str_split($idcard,1);
$wi = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);//各位置上对应的加权因子
for($i=0;$i<count($wi);$i++){
$sum+=$ai_array[$i]*$wi[$i];
}
$avg=$sum%11;
if($check_array[$avg]==array_pop($ai_array)){
return true;
}else{
return false;
}
} function checkid($idcard){
if($this->judgelen($idcard)){
if($this->checkAddr($idcard)){
if($this->checkBorn($idcard)){
if($this->checkCode($idcard)){
echo "验证成功";
}else{
echo "校验码验证失败";
}
}else{
echo "日期验证失败";
}
}else{
echo "地址码验证失败";
}
}else{
echo "长度验证失败";
} }
} $check = new check();
$check->checkid(身份证号);
?>

php不用正则表达式实现身份证号验证详解的更多相关文章

  1. js正则实现二代身份证号码验证详解

    js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至 ...

  2. 做一个牛XX的身份证号验证类(支持15位和18位)

    原文:做一个牛XX的身份证号验证类(支持15位和18位) #region 是否合法的中国身份证号码 protected bool IsChineseID() { if (str.Length == 1 ...

  3. 基于struts2框架-自定义身份证号验证器

    自定义拦截器的步骤: 1.定义一个验证器的类: > 自定义的验证器都需要实现 Validator接口.  > 可以选择继承 ValidatorSupport 或 FieldValidato ...

  4. Laravel 中自定义 手机号和身份证号验证

    首先在 Providers\AppServiceProvider.php 文件中自定义 手机号和身份证号验证 // AppServiceProvider.php 文件 <?php namespa ...

  5. Shrio授权验证详解

    所谓授权,就是控制你是否能访问某个资源,比如说,你可以方位page文件夹下的jsp页面,但是不可以访问page文件夹下的admin文件夹下的jsp页面. 在授权中,有三个核心元素:权限,角色,用户. ...

  6. php正则表达式中preg_match_all函数的详解

    php正则表达式中的函数我们之前为大家结果一个preg_match函数,相信大伙对此有所了解,那么php正则表达式中preg_match_all函数的具体使用是如何的呢?今天我们就带大家了解php正则 ...

  7. 身份证号码的正则表达式及验证详解(JavaScript,Regex)

    简言 在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案.本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案. 身份证号码说明 居民身份证号码,正确.正式的称谓应该是&q ...

  8. 身份证号验证js程序

    最近注册一个网站,居然让我输入个人身份证号,身份证号是个人信息,怎么能告诉你呢? 输入正确的身份证号没有任何问题. 我就仅仅改了最后一位,就告诉我身份证号不对,你是怎么知道的呢?所以,搜了下身份证号的 ...

  9. input表单手机号、身份证号验证

    <form action="" method="post" onsubmit="return checkForm(this)"> ...

随机推荐

  1. mfc双缓冲绘图

    1.要求 在界面加载本地图片并显示,每过100ms改变一张图片显示 2.现象 通过定时器控制CImage,Load,Draw,Destroy,会非常的卡顿.因为Load图片时,会是非常大的数据[所有C ...

  2. MySql 查询表结构信息

    select Column_name as 列名,is_nullable as 是否可为空,data_type as 数据类型,column_default as 默认值,case when colu ...

  3. Spring Boot 监控利器 —— Actutor

    参考 CSDN-学习Spring Boot:(二十七)Spring Boot 2.0 中使用 Actuator 使用Actuator监控Spring Boot应用 程序猿DD-Spring Boot ...

  4. fusion使用——程序集绑定冲突工具

    1.以管理员身份运行vs命令提示符 2.运行 fuslogvw 3.以管理员身份运行Powershell To Enable:(确保fusion日志的文件夹D:\FusionLog\的存在) Set- ...

  5. Jenkins去GitLab拉取Java代码自动打包

    jenkins的部署 一.部署git 1)先检查系统是否已经自带了git,如果有,就卸载 $ rpm -qa | grep git && rpm -e git --nodeps 2)开 ...

  6. C#通过DocX创建word

    网上有一些基础的东西,但是比如插入图片,就没有找到方案,最终自己摸索出来的. 1.首先通过Nuget获取引用,关键字:“DocX” 2.示例代码 class Program { static void ...

  7. 如何增加亚马逊listing多个类目节点

    流量是电商销售的必要因素,可以说,任何成功的电商平台都离不开流量.亚马逊listing优化做得好,不仅能提高产品的曝光率,还能提升转换率,而好的类目可以吸引大的流量.帮你快速爬升. 首先我们来了解一下 ...

  8. ansible如果兼容Centos5

    基本安装 安装gcc,用于编译python源码 yum install gcc 更新python版本 centos自带python2.6版本,由于centos已对python深度依赖,所以更新pyth ...

  9. Javascript回调函数中的this指向问题

    使用js中的定时器(setInterval,setTimeout),很容易会遇到this指向的问题. 直接上例子: 1 var name = 'my name is window'; 2 var ob ...

  10. Markdown的基本语法记录

    1.标题 示例代码: # 标题1 ## 标题2 ### 标题3 #### 标题4 ##### ... 效果: 标题1 标题2 标题3 标题4 ... 注:# 后面应保持空格 2. 分级标题 示例代码: ...