<?php
// check
class check{// $num为身份证号码,$checkSex:1为男,2为女,不输入为不验证public function checkIdentity($num,$checkSex=''){// 不是15位或不是18位都是无效身份证号if(strlen($num) != 15 && strlen($num) != 18){return false;}// 是数值if(is_numeric($num)){// 如果是15位身份证号if(strlen($num) == 15 ){// 省市县(6位)$areaNum = substr($num,0,6);// 出生年月(6位)$dateNum = substr($num,6,6);// 性别(3位)$sexNum = substr($num,12,3);}else{// 如果是18位身份证号// 省市县(6位)$areaNum = substr($num,0,6);// 出生年月(8位)$dateNum = substr($num,6,8);// 性别(3位)$sexNum = substr($num,14,3);// 校验码(1位)$endNum = substr($num,17,1);}}else{// 不是数值if(strlen($num) == 15){return false;}else{// 验证前17位为数值,且18位为字符x$check17 = substr($num,0,17);if(!is_numeric($check17)){return false;}// 省市县(6位)$areaNum = substr($num,0,6);// 出生年月(8位)$dateNum = substr($num,6,8);// 性别(3位)$sexNum = substr($num,14,3);// 校验码(1位)$endNum = substr($num,17,1);if($endNum != 'x' && $endNum != 'X'){return false;}}}if(isset($areaNum)){if(!$this ->checkArea($areaNum)){return false;}}if(isset($dateNum)){if(!$this ->checkDate($dateNum)){return false;}}// 性别1为男,2为女if($checkSex == 1){if(isset($sexNum)){if(!$this ->checkSex($sexNum)){return false;}}}else if($checkSex == 2){if(isset($sexNum)){if($this ->checkSex($sexNum)){return false;}}}if(isset($endNum)){if(!$this ->checkEnd($endNum,$num)){return false;}}return true;}// 验证城市private function checkArea($area){$num1 = substr($area,0,2);$num2 = substr($area,2,2);$num3 = substr($area,4,2);// 根据GB/T2260—999,省市代码11到65if(10 < $num1 && $num1 < 66){return true;}else{return false;}//============// 对市 区进行验证//============}// 验证出生日期private function checkDate($date){if(strlen($date) == 6){$date1 = substr($date,0,2);$date2 = substr($date,2,2);$date3 = substr($date,4,2);$statusY = $this ->checkY('19'.$date1);}else{$date1 = substr($date,0,4);$date2 = substr($date,4,2);$date3 = substr($date,6,2);$nowY = date("Y",time());if(1900 < $date1 && $date1 <= $nowY){$statusY = $this ->checkY($date1);}else{return false;}}if(0<$date2 && $date2 <13){if($date2 == 2){// 润年if($statusY){if(0 < $date3 && $date3 <= 29){return true;}else{return false;}}else{// 平年if(0 < $date3 && $date3 <= 28){return true;}else{return false;}}}else{$maxDateNum = $this ->getDateNum($date2);if(0<$date3 && $date3 <=$maxDateNum){return true;}else{return false;}}}else{return false;}}// 验证性别private function checkSex($sex){if($sex % 2 == 0){return false;}else{return true;}}// 验证18位身份证最后一位private function checkEnd($end,$num){$checkHou = array(1,0,'x',9,8,7,6,5,4,3,2);$checkGu = array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);$sum = 0;for($i = 0;$i < 17; $i++){$sum += (int)$checkGu[$i] * (int)$num[$i];}$checkHouParameter= $sum % 11;if($checkHou[$checkHouParameter] != $num[17]){return false;}else{return true;}}// 验证平年润年,参数年份,返回 true为润年  false为平年private function checkY($Y){if(getType($Y) == 'string'){$Y = (int)$Y;}if($Y % 100 == 0){if($Y % 400 == 0){return true;}else{return false;}}else if($Y % 4 ==  0){return true;}else{return false;}}// 当月天数 参数月份(不包括2月)  返回天数private function getDateNum($month){if($month == 1 || $month == 3 || $month == 5 || $month == 7 || $month == 8 || $month == 10 || $month == 12){return 31;}else if($month == 2){}else{return 30;}}}// 测试
header("content-type:text/html;charset=utf-8");
$num = '350322199001282536';
// 1为男,2为女,不输入为不验证
$sex = 1;
$test = new check();
$data = $test ->checkIdentity($num,$sex);
var_dump($data);// 新的18位身份证号码各位的含义:
// 1-2位省、自治区、直辖市代码;    11-65
// 3-4位地级市、盟、自治州代码;
// 5-6位县、县级市、区代码;
// 7-14位出生年月日,比如19670401代表1967年4月1日;
// 15-17位为顺序号,其中17位男为单数,女为双数;
// 18位为校验码,0-9和X,由公式随机产生。
// 举例:
// 130503 19670401 0012这个身份证号的含义: 13为河北,05为邢台,03为桥西区,出生日期为1967年4月1日,顺序号为001,2为验证码。 // 15位身份证号码各位的含义:
// 1-2位省、自治区、直辖市代码;
// 3-4位地级市、盟、自治州代码;
// 5-6位县、县级市、区代码;
// 7-12位出生年月日,比如670401代表1967年4月1日,这是和18位号码的第一个区别;
// 13-15位为顺序号,其中15位男为单数,女为双数;
// 与18位身份证号的第二个区别:没有最后一位的验证码。
// 举例:
// 130503 670401 001的含义; 13为河北,05为邢台,03为桥西区,出生日期为1967年4月1日,顺序号为001。

2

//身份证正则表达式(15位)
$isIDCard1="/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$/";
//身份证正则表达式(18位)
$isIDCard2="/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$/";

PHP 验证身份证号相关推荐

  1. js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr)...

    js进阶正则表达式15验证身份证号(|符号的使用:var reg=/^\d{17}[\d|X]$|^\d{15}$/)(str的方法substr) 一.总结 1.|符号的使用:var reg=/^\d ...

  2. python之验证身份证号合法性的库:id_validator

    上个星期,大佬分享了一个验证身份证号合法性的库:id_validator,没空去试着用一下看看,今天有点时间,来试着用下这个库. 1.首先,要安装这个库,windows+R键运行cmd,打开命令行窗口 ...

  3. 今天写了个自定义函数验证身份证号是否符合规则

    大家好,我是老王.今天调了半天,报了各种错误,终于写好了这个验证身份证号的自定义函数,规则可以参考身份证号码的编排规则 CREATE OR REPLACE FUNCTION LAOWANG_CHECK ...

  4. 用python判断身份证号性别_验证身份证号的Python脚本

    引用 a[0], a[1], a[2], a[3], ..., a[16], a[17] 其中a[i]表示第i位数字,i=0,1,2,...,17,如果最后一位(校验位)是X,则a[17]=10 每一 ...

  5. 【SQLServer】验证身份证号第18位校验码是否合法

    目录 1.业务场景 2.知识前提 3.实现方案 4.测试 5.参考链接 1.业务场景 参考国家标准GB 11643-1999,居民身份证号组成:6位数字地址码+8位数字出生日期码+3位数字顺序码+1位 ...

  6. 验证身份证号 格式问题

    导入的时候 验证身份证号的格式问题 if(!sfzh.equals("")&&isIDNumber(sfzh) == false){returnMap.put(&q ...

  7. 使用js验证身份证号格式以及身份证号中的生日验证

    由于不管是测试项目练手还是实际项目开发,都应该考虑数据的严密性和软件的通俗易懂的实用性,下面是我用js实现的验证身份证号格式以及身份证号中的生日验证代码 //生日移出点击事件验证身份证号中的生日验证 ...

  8. EXCEL规范数据输入教程-验证身份证号

    EXCEL日常工作中经常会输入身份证号码,一不小心就可能出错,今天大飞老师就分享这样一个示例EXCEL规范数据输入教程-验证身份证号. 我们首先要保证在EXCEL中能正确输入身份证号码(PS:身份证号 ...

  9. Java验证身份证号是否合法

    身份证作为居民的唯一标识.在很多系统中需要用户输入身份证号信息,今天我们就来编写一个方法验证身份证号的合法性. 首先我们来看看身份证号的编码规则: 前1-2位数字表示:所在省(直辖市.自治区)的代码: ...

  10. python判断身份证是否合法的函数_Python开发之身份证验证库id_validator验证身份证号合法性及根据身...

    上个星期,大佬分享了一个验证身份证号合法性的库:id_validator,没空去试着用一下看看,今天有点时间,来试着用下这个库. 1.首先,要安装这个库,windows+R键运行cmd,打开命令行窗口 ...

最新文章

  1. 打印从1到最大的n位数
  2. python条码识别
  3. linux查看进程相关命令
  4. hbase windows安装
  5. 第十次ScrumMeeting博客
  6. gre biochemistry_【备考精选】2020年11月6日GRE写作Issue预测分享
  7. 逻辑分析推理(戴帽子问题)博弈
  8. 我的内核学习笔记7:Intel LPC驱动lpc_ich分析
  9. pytest十二:cmd命令行参数
  10. lettuce配置_skywalking与lettuce哨兵模式
  11. abb工业机器人电压不稳_ABB工业机器人常见故障及解决方法,想要提升自己的就赶紧保存下来吧...
  12. Intellij IDEA安卓开发环境的搭建
  13. 日语毕业论文日文参考文献怎么找?
  14. 2020论文阅读:Few-Shot Object Detection with Attention-RPN and Multi-Relation Detector
  15. 龙芯3a3000+7a1000 单板调试
  16. 八爪鱼抓取html,网页图片采集和抓取方法详解 - 八爪鱼采集器
  17. 单片机/C语言浮点型数据转换为字符串方法
  18. 山寨电子以改良式研发谋求蜕变
  19. VUE3 使用 Ant Design Vue的icon图标
  20. 做个全栈工程师真的好吗?

热门文章

  1. 常用简体中文字体转Unicode和Unicode 2编码对照表
  2. web系统开发中关于企业里各种系统分类
  3. MSP430单片机各种寄存器总结(1)——CPU 寄存器
  4. android10禁用华为桌面,[原创]简单分析华为emui10对第三方桌面的禁用逻辑(华为手机管家app) + 求助新rom的分析入手思路...
  5. 免杀的N种姿势-基础篇
  6. 用nvhda解决Ubuntu无法通过HDMI输出声音且设置中输出设备无HDMI的问题
  7. RHCSA——第八天
  8. JTAG接口和SWD接口定义
  9. 时域,频域和空域的概念
  10. isql登陆本地和远程sybase数据库