说明:最近项目需求要对用户身份证的有效期验证,但向公安系统或者银联付费请求查询对应信息,
金额成本比较高,每次查询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. MAC安装OpenXenManager管理Xenserver
  2. PyTorch深度学习入门与实战(案例视频精讲)
  3. 渥太华大学药学院院长Daniel Figeys团队诚邀药物-微生物组方向博士后
  4. 用Python解“两个数的简单计算器”题
  5. 什么是计算机网络?—Vecloud微云
  6. ie浏览器怎么打开html,Win10系统IE浏览器不能打开HTML怎么办
  7. Machine Learning - Coursera week5 Backpropagation in Practice
  8. vbs 窗体文字获取文档_MDI类型窗体设置背景图片
  9. 日语常用会话1000句
  10. 校验-------邮箱、手机号、电话号码、身份证号码、数字等工具类
  11. 解决opencv打开视频上下翻转问题
  12. 内存卡提示要格式化怎么办?
  13. Ubuntu 16.04 安装wine-qq 7.8 并解决不能输入中文问题
  14. Minimum supported Gradle version is 5.4.1. Current version is 4.10.1. If using the gradle wrapper
  15. mac蓝牙鼠标总是自己断开_解决Mac蓝牙鼠标和键盘经常断开的问题
  16. C# winform 自定义控件配置代码 多显示 换行
  17. 波士顿房价预测(回归)
  18. 华胜天成旗下成员企业沃趣科技为华泰证券IT系统保驾护航
  19. wordpress博客搭建-保姆教程
  20. Excel 恢复默认行高、列宽

热门文章

  1. 淘宝订单API获取订单代码说明
  2. 白嫖党必备非常好用的苹果cms模板网站
  3. let和const以及箭头函数
  4. 与众不同的区块链投资第一课
  5. vue百度地图api 获取小区边界值
  6. 假如任正非这个“太阳”不在了,华为怎么办?
  7. 洛谷P1605 迷宫 纯C语言题解
  8. 服务器操作系统方案,服务器操作系统解决方案
  9. 【luoguP5550】Chino的数列
  10. Mac 安装depot_tools