说明:最近项目需求要对用户身份证的有效期验证,但向公安系统或者银联付费请求查询对应信息,
金额成本比较高,每次查询3-5元人民币成本较高,于是需要自行来处理有效期规则和防止有效期、
身份证号码等规则被篡改:

一、首先判断身份证有效期截止日期是否是“长期”,若为长期且当前年份减去身份证号码里出生日期年份>=46(岁)则直接当作未过期来处理(因为仅在年龄>=46时身份证有效期才可能会为“长期”);

二、若有效期截止日期不是长期,则继续和本地服务器当前时间判断,若有效期截止日期在本地服务器当前时间之前,返回过期:

三、若有效期截止日期在本地服务器当前时间之后,继续以下判断:

STEP1:系统根据“主卡证件有效起始日期”及“主卡证件有效截止日期”栏位的差值计算主卡人持有的是5年/10年/20年/长期/临时的身份证,记为值A若“主卡证件有效截止日期”栏位值前4位-“主卡证件有效起始日期”栏位值前4位=5,则A=5;若“主卡证件有效截止日期”栏位值前4位-“主卡证件有效起始日期”栏位值前4位=10,则A=10;若“主卡证件有效截止日期”栏位值前4位-“主卡证件有效起始日期”栏位值前4位=20,则A=20;若“主卡证件有效截止日期”栏位值前4位-“主卡证件有效起始日期”栏位值前4位〉20,则A=长期;若“主卡证件有效截止日期”栏位值前4位-“主卡证件有效起始日期”栏位值前4位=0或=1,则A=0或=1;STEP2:系统根据主卡人的“出生日期”及“主卡证件有效起始日期”计算主卡人办理身份证时的年龄(周岁),记为值BB=(“主卡证件有效起始日期”栏位值—“出生日期”栏位值)/10000后的整数部分 ->(如果直接取到年份:年份-年份不用出10000)STEP3:若值A与值B不满足以下关系,则有效期无效;当A=5时,B<16;当A=10时,16≤B≤25;当A=20时,26≤B≤45;当A=长期时,B>=46;当A=0或A=1时,B可为任意值;STEP4:当A≠5且A≠10且A≠20且A≠长期且A≠1且A≠0时,则有效期无效;STEP5:A=5或A=10或A=20时,若“主卡证件有效起始日期”和“主卡证件有效截止日期”月日不是一一匹配,则有效期无效。
四:代码封装
public function verifyEffectiveTime($cardNum, $startTime, $endTime)
{$ret = false;$startMonthMDay = substr($startTime, 5);$endtMonthMDay = substr($endTime, 5);$compareMonthDay = ($startMonthMDay == $endtMonthMDay);$effectiveStartTime = substr($startTime, 0, 4);$variableOne = substr($endTime, 0, 4) - $effectiveStartTime;$getBirthDay = IdCard::getBirthDay($cardNum);$birthYear = substr($getBirthDay, 0, 4);$variableTwo = $effectiveStartTime - $birthYear;if ($variableOne == 5) {if (($variableTwo < 16) && $compareMonthDay) {$ret = true;}} elseif ($variableOne == 10) {if ((16 <= $variableTwo && $variableTwo <= 25) && $compareMonthDay) {$ret = true;}} elseif ($variableOne == 20) {if ((26 <= $variableTwo && $variableTwo <= 45) && $compareMonthDay) {$ret = true;}} elseif ($variableOne > 20) {//长期if ($variableTwo >= 46) {$ret = true;}} elseif ($variableTwo == 0 || $variableTwo == 1) {//则A=0或=1,$variableTwo可以为任意值$ret = true;} else {$ret = false;}return $ret;
}

PHP身份证有效期校验(通用)相关推荐

  1. 史上最好用的校验【身份证有效期】的JS方法

    最近有一个需求需要校验输入的身份证有效期的开始和结束日期, 由于是没有使用日期选择框,是直接文本录入的, 因此需要对录入的内容做一些校验, 废话不多说,直接上代码 let idCardPeriodDa ...

  2. 基于可视化结构的身份证号码校验系统-树莓派实现

    基于可视化结构的身份证号码校验系统 摘要: 本作品是一个通用的身份证号码校验系统,目前已经尝试在Linux和Windows系统下运行,结果均可达到理想效果.系统通过运用基础GUI库tkinter创建系 ...

  3. vueCli3 身份证正则校验

    js /** @Description:身份证校验规则.*/ //校验身份证号 export function isIdentityId(identityId) {var patrn = /(^\d{ ...

  4. 项目中身份证有效期的判断规则

    最近做项目要用到判断身份证有效信息,但是又无法调用公安系统接口获取有效期.身份证号码等信息,于是在系统中做了如下处理来判断,来处理有效期规则和防止有效期.身份证号码等规则被篡改: 1).首先判断身份证 ...

  5. js身份证号校验方法(转载我的请注明哈哈)

    //时间变成两位数 function toTwo(n) {return +n < 10 ? '0' + n : n + ''; }; function Type(obj) {var arr = ...

  6. 在java中如何做身份证号码校验

    https://blog.csdn.net/persistencegoing/article/details/84376427 直接上代码,里面有测试类 /*** 身份证前6位[ABCDEF]为行政区 ...

  7. 身份证合法性校验规则

    身份证构成说明: 身份证号构成(从左到右): 第1-6位数是行政区域编码 第7到第14位是出生日期 第15-17位是同一天出生的顺序号(男的用奇数数,女的用偶数) 第18位是校验码,根据ISO7064 ...

  8. JS身份证号码校验大全史上最全号称公安局安全监测

    身份证号码校验 function testid(id) {// 1 "验证通过!", 0 //校验不通过 // id为身份证号码var format = /^(([1][1-5]) ...

  9. C语言基础入门48篇_26_身份证号校验程序(以身份证的校验方式是实例加深对数组及函数封装的理解、字符-‘0‘得到字符对应的int类型数字)

    本篇根据以二代身份证的校验方式是实例加深对数组及函数封装的理解 1. 第二代身份证号的组成 第二代身份证号为18位,各位数字对应了不同的信息(以下顺序从左往右): AABBCCYYYYMMDDXXXV ...

最新文章

  1. linux下文件操作之cp和mv
  2. ref与out之间的区别
  3. system流怎么判断为空_面试时被问到单例模式,怎么回答才能让面试官眼前一亮?...
  4. 程序员如果不学好底层,将毫无作为
  5. 快速构建Windows 8风格应用25-数据绑定
  6. 单机 弱联网手游 防破解 金币修改 简单措施
  7. 计算机word表格求和怎么操作,Word中的表格如何自动求和
  8. 无法访问网址的最基本原因分析,让你永远无法访问淘宝/京东
  9. 博客群建软件-如何让链接效果的最大化
  10. GPU、GPU驱动、OpenGL、游戏引擎之间的关系
  11. 微信公众号与微信小程序如何相辅相成的?
  12. Windows环境下,输入(Chkntfs /X C:)命令可以取消系统每次启动对C盘的磁盘扫描程序
  13. 设置服务器可以多人同时远程访问
  14. clickhouse 数据字典使用详解
  15. 打开转盘锁 ,易懂的BFS解法
  16. PTA 2-1 旅游规划(最短路径问题)简单floyd算法
  17. 举例5种计算机网络设备,一种计算机网络设备的制作方法
  18. pycharm自动生成函数调用图
  19. 入库/供应商管理库存(SMI)
  20. 小学信息说课稿范文认识计算机,小学信息技术说课稿《认识计算机》-20210410201013.docx-原创力文档...

热门文章

  1. Vue生命周期,Vue中在哪个生命周期阶段调用异步请求最佳
  2. 跟单王订单追踪软件如何打通金蝶ERP?
  3. Java static与final详细讲解
  4. c语言程序设计期末考试卷,C语言程序设计期末考试试卷
  5. C++超轻量限流器实现
  6. 水果销售系统课程设计(第一阶段--需求分析)
  7. Android:安卓学习笔记之navigation的简单理解和使用
  8. Linux中的定时自动执行功能(at,crontab)
  9. 前端PC端微信扫码登录
  10. 浦东电商行业协会十周年庆活动隆重举办