已测试,90%左右的身份证号都可以检验出来是否是真实的身份证号,如果要求不高的话,可以不用在使用第三方的身份证号验证了封装的model 可以直接使用的 大家可以借鉴看一下,有问题可以及时指出
<?php
namespace app\backend\controller;
class IdentityCard{/*** 校验身份证号是否合法* @param string $num 待校验的身份证号* @return bool*/public static function isValid(string $num){//老身份证长度15位,新身份证长度18位$length = strlen($num);if ($length == 15) { //如果是15位身份证//15位身份证没有字母if (!is_numeric($num)) {return false;}// 省市县(6位)$areaNum = substr($num, 0, 6);// 出生年月(6位)$dateNum = substr($num, 6, 6);} else if ($length == 18) { //如果是18位身份证//基本格式校验if (!preg_match('/^\d{17}[0-9xX]$/', $num)) {return false;}// 省市县(6位)$areaNum = substr($num, 0, 6);// 出生年月日(8位)$dateNum = substr($num, 6, 8);} else { //假身份证return false;}//验证地区if (!self::isAreaCodeValid($areaNum)) {return false;}//验证日期if (!self::isDateValid($dateNum)) {return false;}//验证最后一位if (!self::isVerifyCodeValid($num)) {return false;}return true;}/*** 省市自治区校验* @param string $area 省、直辖市代码* @return bool*/private static function isAreaCodeValid(string $area) {$provinceCode = substr($area, 0, 2);// 根据GB/T2260—999,省市代码11到65if (11 <= $provinceCode && $provinceCode <= 65) {return true;} else {return false;}}/*** 验证出生日期合法性* @param string $date 日期* @return bool*/private static function isDateValid(string $date) {if (strlen($date) == 6) { //15位身份证号没有年份,这里拼上年份$date = '19'.$date;}$year  = intval(substr($date, 0, 4));$month = intval(substr($date, 4, 2));$day   = intval(substr($date, 6, 2));//日期基本格式校验if (!checkdate($month, $day, $year)) {return false;}//日期格式正确,但是逻辑存在问题(如:年份大于当前年)$currYear = date('Y');if ($year > $currYear) {return false;}return true;}/*** 验证18位身份证最后一位* @param string $num 待校验的身份证号* @return bool*/private static function isVerifyCodeValid(string $num){if (strlen($num) == 18) {$factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];$tokens = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];$checkSum = 0;for ($i = 0; $i < 17; $i++) {$checkSum += intval($num{$i}) * $factor[$i];}$mod   = $checkSum % 11;$token = $tokens[$mod];$lastChar = strtoupper($num{17});if ($lastChar != $token) {return false;}}return true;}
}

PHP 身份证号验证是否是真实的相关推荐

  1. python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

    大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...

  2. Java 身份证号验证

    二代身份证号码验证 扯淡区: 本博客主要内容是利用Java语言来验证身份证号码是否符合18位的二代身份证号规范. 公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次 ...

  3. 利用python实现身份证号验证系统

    大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...

  4. python身份证验证系统_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

    大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...

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

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

  6. 用python制作全国身份证号验证及查询系统

    ​ 大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性 ...

  7. 身份证号验证 银行卡号验证

    身份证号验证 /* 审批系统的身份证验证* 身份证15位编码规则:dddddd yymmdd xx p* dddddd:6位地区编码* yymmdd: 出生年(两位年)月日,如:910215* xx: ...

  8. 【趣味案例】用python制作全国身份证号验证及查询系统

    今天给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及发证地查询,看起来是不是很高大上, ...

  9. jq身份证号验证(详细)

    //检查确认身份证是否合法(新) function checkCardNumber(text, callback){ checkAge = true; var number = text; if (n ...

最新文章

  1. java二进制反转_Java实现 LeetCode 190 颠倒二进制位
  2. springmvd接收参数问题
  3. 黑马程序员—————— 随机访问流
  4. 移动架构-迭代器模式
  5. AirServer for Mac(ios投屏到mac的实用工具)
  6. winfrom软件开发汽车测试_从事汽车电子软件开发岗,我们最近还没那么愁
  7. shell 小米system锁adb_小米/红米系列手机解system分区锁方法详解
  8. 靠政府补贴实现华丽财报的科大讯飞,它背后蕴含着怎样的生机
  9. 深度解析,抖音对口型唱歌类短视频内容制作流程,步骤技巧分享
  10. c语言启动程序句柄无效,win7系统玩英雄联盟突然弹出“句柄无效”窗口的解决方法...
  11. 宏碁传奇Go评测 怎么样
  12. 多用户在线书签管理工具My-BookMark
  13. Linux-- rmdir 命令
  14. 红外寻迹小车基于K128单片机的红外对管飞思卡尔智能车(5个对管)程序部分
  15. 四分位数的应用——基于收入实例的箱体图与离群值规则
  16. 18 打印日期 华科复试
  17. 百度竞价新人提升赚钱概率的方法
  18. 搜索总结)(深搜和广搜)
  19. ubuntu16 黑主题_Ubuntu16.04 主题美化
  20. 碰到个阿里p8,终于知道了别人为什么这么强,算是见识到了基础的天花板

热门文章

  1. CDN是什么?为什么要使用CDN?
  2. LoadLibrary深入分析
  3. 网站策划与运营关于网站策划
  4. win8手动添加linux启动项,Win8下添加开机启动项的简单办法
  5. 查看端口信息netstat,查看ip,连接端口
  6. touchGFX安装与初识
  7. Flutter 导航教程
  8. 利用几何布朗运动对招商银行2021年进行股价预测
  9. 数据中心视频监控:安全必备
  10. module java.base does not “opens java.lang“ to unnamed module