php读取id卡,php不使用正则表达式来实现ID卡验证

b9cc9f83776b5f64789cfb1ce3194b50.png

我写了一个ID号验证类php小白,写得不好,欢迎大家给我更多的评论和建议. ID号分为四个部分,第一部分是地址代码的前6位数字,7 -14位数字是出生日期,15-17位数字是同一天在同一天出生的男孩的奇数位置,女孩是偶数,第18位是校验码,校验码的计算是前17位数字乘以其相应位置. 将上述加权因子值相加,得出的总和为其余的11位php号码验证,则根据其余部分通过转换表获得第18个校验码值. 以下是具体的实现代码:

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

$sum+=$ai_array[$i]*$wi[$i];

}

$avg=$sum;

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 "长度验证失败";

}

}

}

?>

通过js正则化验证第二代号码的详细说明

js正则化,以实现对第二代号数字校验码的验证. 排列顺序从左到...

成为牛XX号码验证类(支持15位和18位数字)

82b3259bb8664936b7c14d5ad3e53c.png

原始信息: 设置母牛XX ID号验证类(支持15位和18位数字)#region是受保护的合法中文ID号bool IsChineseID(){if(str.Length == 1 ... <

基于struts2框架-自定义ID卡号验证器

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

详细的Shrio授权验证

所谓的授权是控制您是否可以访问特定资源. 例如,您可以访问页面文件夹下的jsp页面,但是不能访问页面文件夹下的admin文件夹下的jsp页面. 在授权中,包含三个核心元素: 权限,角色php号码验证,用户...

预浸料和低料的详细说明;匹配和低位;所有函数都在php正则表达式中

php正则表达式中的函数我们之前已经为每个人制作了preg_match函数. 我相信每个人都知道这一点,那么在PHP正则表达式中preg_match_all函数的具体用途是什么?今天我们将带您了解php Regular ...

详细的正则表达式以及ID号和lpar的验证; JavaScript,Regex和rpar;

简而言之,在进行用户实名验证时,经常使用ID编号的正则表达式和验证方案. 本文列出了两种验证方案. 您可以根据项目的实际情况选择合适的方案. ID号表示居民ID号,正确. 正式名称应为&q ...

号码验证js程序

最近注册了一个网站,实际上让我输入了我的个人ID号,ID号是个人信息,我怎么告诉你?输入正确的ID号没有问题. 告诉我ID号码有误,您怎么知道?所以,我搜索了ID号...

输入表格的手机号码,号码验证

...

Python re模块(正则表达式)分组和断言的详细说明

正则表达式分组. 断言的详细解释提示: 阅读本文需要一定基础的正则表达式. 正则表达式中的断言似乎是一种高级应用程序,不是因为它很困难,而是因为它的概念更加抽象. 这很容易理解,让我们来解释一下当今的流行菜肴. 如果...

c&plus; &加;向量使用

1. 包含头文件: 1 #include 2.声明和初始化: 首先std :: vector ; // in ...的空向量

阅读“ CODE”第14〜20章

14. 反馈和触发振荡器可以独立连续地打开和关闭,而无需人工干预. 所有计算机都依靠某个振荡器来同步其他组件. 当两个开关都断开时当电路具有两个稳定状态时,这种电路称为触发器. 触发器有一个存储器...

查看WCF会话会话(9)

转载的地址: 每个客户端在服务器上都有自己独立的数据存储区,彼此之间不相关,就好像A和服务器正在分别交谈...

[行业交流] 2016 TiD质量竞争力会议-从移动互联网测试到质量转变的道路

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-223400-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值