PHP 身份证号验证是否是真实的
已测试,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 身份证号验证是否是真实的相关推荐
- python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...
大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...
- Java 身份证号验证
二代身份证号码验证 扯淡区: 本博客主要内容是利用Java语言来验证身份证号码是否符合18位的二代身份证号规范. 公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次 ...
- 利用python实现身份证号验证系统
大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...
- python身份证验证系统_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...
大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...
- 基于struts2框架-自定义身份证号验证器
自定义拦截器的步骤: 1.定义一个验证器的类: > 自定义的验证器都需要实现 Validator接口. > 可以选择继承 ValidatorSupport 或 FieldValidato ...
- 用python制作全国身份证号验证及查询系统
大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性 ...
- 身份证号验证 银行卡号验证
身份证号验证 /* 审批系统的身份证验证* 身份证15位编码规则:dddddd yymmdd xx p* dddddd:6位地区编码* yymmdd: 出生年(两位年)月日,如:910215* xx: ...
- 【趣味案例】用python制作全国身份证号验证及查询系统
今天给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及发证地查询,看起来是不是很高大上, ...
- jq身份证号验证(详细)
//检查确认身份证是否合法(新) function checkCardNumber(text, callback){ checkAge = true; var number = text; if (n ...
最新文章
- java二进制反转_Java实现 LeetCode 190 颠倒二进制位
- springmvd接收参数问题
- 黑马程序员—————— 随机访问流
- 移动架构-迭代器模式
- AirServer for Mac(ios投屏到mac的实用工具)
- winfrom软件开发汽车测试_从事汽车电子软件开发岗,我们最近还没那么愁
- shell 小米system锁adb_小米/红米系列手机解system分区锁方法详解
- 靠政府补贴实现华丽财报的科大讯飞,它背后蕴含着怎样的生机
- 深度解析,抖音对口型唱歌类短视频内容制作流程,步骤技巧分享
- c语言启动程序句柄无效,win7系统玩英雄联盟突然弹出“句柄无效”窗口的解决方法...
- 宏碁传奇Go评测 怎么样
- 多用户在线书签管理工具My-BookMark
- Linux-- rmdir 命令
- 红外寻迹小车基于K128单片机的红外对管飞思卡尔智能车(5个对管)程序部分
- 四分位数的应用——基于收入实例的箱体图与离群值规则
- 18 打印日期 华科复试
- 百度竞价新人提升赚钱概率的方法
- 搜索总结)(深搜和广搜)
- ubuntu16 黑主题_Ubuntu16.04 主题美化
- 碰到个阿里p8,终于知道了别人为什么这么强,算是见识到了基础的天花板