php不用正则表达式实现身份证号验证详解
写了一个身份证号验证类,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不用正则表达式实现身份证号验证详解的更多相关文章
- js正则实现二代身份证号码验证详解
js正则实现二代身份证号码验证详解 根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至 ...
- 做一个牛XX的身份证号验证类(支持15位和18位)
原文:做一个牛XX的身份证号验证类(支持15位和18位) #region 是否合法的中国身份证号码 protected bool IsChineseID() { if (str.Length == 1 ...
- 基于struts2框架-自定义身份证号验证器
自定义拦截器的步骤: 1.定义一个验证器的类: > 自定义的验证器都需要实现 Validator接口. > 可以选择继承 ValidatorSupport 或 FieldValidato ...
- Laravel 中自定义 手机号和身份证号验证
首先在 Providers\AppServiceProvider.php 文件中自定义 手机号和身份证号验证 // AppServiceProvider.php 文件 <?php namespa ...
- Shrio授权验证详解
所谓授权,就是控制你是否能访问某个资源,比如说,你可以方位page文件夹下的jsp页面,但是不可以访问page文件夹下的admin文件夹下的jsp页面. 在授权中,有三个核心元素:权限,角色,用户. ...
- php正则表达式中preg_match_all函数的详解
php正则表达式中的函数我们之前为大家结果一个preg_match函数,相信大伙对此有所了解,那么php正则表达式中preg_match_all函数的具体使用是如何的呢?今天我们就带大家了解php正则 ...
- 身份证号码的正则表达式及验证详解(JavaScript,Regex)
简言 在做用户实名验证时,常会用到身份证号码的正则表达式及校验方案.本文列举了两种验证方案,大家可以根据自己的项目实际情况,选择适合的方案. 身份证号码说明 居民身份证号码,正确.正式的称谓应该是&q ...
- 身份证号验证js程序
最近注册一个网站,居然让我输入个人身份证号,身份证号是个人信息,怎么能告诉你呢? 输入正确的身份证号没有任何问题. 我就仅仅改了最后一位,就告诉我身份证号不对,你是怎么知道的呢?所以,搜了下身份证号的 ...
- input表单手机号、身份证号验证
<form action="" method="post" onsubmit="return checkForm(this)"> ...
随机推荐
- jquery-1.4.4.min.js无法解析json中result.data问题
如下图该版本无法解析json数据 解决方法引用jquer.min.js,并且将$修改为jQuery
- flutter插件汇总2
作者:知乎用户链接:https://www.zhihu.com/question/307594373/answer/568969429来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...
- git图形化界面gitk里中文乱码解决
将git全局配置成utf-8格式即可,命令行里输入 git config --global gui.encoding utf-8
- Vue-admin工作整理(十二):Vuex-插件(持久化存储)
Vuex可以支持插件形式,来处理指定业务,比如:持久化存储的插件(当每次刷新浏览器的时候store里面的参数都会被清除,因为它是存在内存中的,而不是存在本地的,有时候我们希望将一些东西存在本地) 插件 ...
- webpack-dev-server的执行逻辑
1.运行npm i webpack-dev-server -D 把工具安装到项目的本地开发依赖 2.改工具用法跟webpack的用法完全一样:package.json中增加配置,直接用npm run ...
- ES6多层解构
const info = { person: { name: 'xiaobe', other: { age: 22, } }, song: 'rolling', } // 解构person的内容 co ...
- vue数据变动监测
原文链接:https://blog.csdn.net/man_tutu/article/details/72148362 对象: 不能监测到: var vm = new Vue({ data:{ a: ...
- 悲观并发 乐观并发 Entity Framework Core中的并发处理
悲观并发策略 A用户发起一个请求 开启了事务 查询到了某一条数据 进行修改 在A提交事务之前 其他人都不能对这条数据进行修改 这种策略最常见的一个问题就是死锁 比如A修改X记录,B修改Y ...
- js斐波那契数列
斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...... 这个数列从第3项开始,每一项都等于前两项之和. 1.递归算法: function ...
- 合并K个排序链表(java实现)
题目: 合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: ...