function IdCodeValid($code){
// var_dump((int)substr($code,10,2));die;
//身份证号合法性验证
//支持15位和18位身份证号
//支持地址编码、出生日期、校验位验证
$city=[11=>"北京",12=>"天津",13=>"河北",14=>"山西",15=>"内蒙古",21=>"辽宁",22=>"吉林",23=>"黑龙江 ",31=>"上海",32=>"江苏",33=>"浙江",34=>"安徽",35=>"福建",36=>"江西",37=>"山东",41=>"河南",42=>"湖北 ",43=>"湖南",44=>"广东",45=>"广西",46=>"海南",50=>"重庆",51=>"四川",52=>"贵州",53=>"云南",54=>"西藏 ",61=>"陕西",62=>"甘肃",63=>"青海",64=>"宁夏",65=>"新疆",71=>"台湾",81=>"香港",82=>"澳门",91=>"国外 "];
$row=[
'pass'=>true,
'msg'=>'验证成功'
];
if(!$code || !preg_match('/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/',$code)){
$row=[
'pass'=>false,
'msg'=>'身份证号格式错误'
];
}elseif(!$city[substr($code,0,2)] || (int)substr($code,10,12) > 12){
$row=[
'pass'=>false,
'msg'=>'身份证号地址编码错误'
];
}
return $row;
}
方法二
//验证身份证是否有效
function validateIDCard($IDCard) {
if (strlen($IDCard) == 18) {
return check18IDCard($IDCard);
} elseif ((strlen($IDCard) == 15)) {
$IDCard = convertIDCard15to18($IDCard);
return check18IDCard($IDCard);
} else {
return false;
}
}
//计算身份证的最后一位验证码,根据国家标准GB 11643-1999
function calcIDCardCode($IDCardBody) {
if (strlen($IDCardBody) != 17) {
return false;
}
//加权因子
$factor = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
//校验码对应值
$code = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
$checksum = 0;
for ($i = 0; $i < strlen($IDCardBody); $i++) {
$checksum += substr($IDCardBody, $i, 1) * $factor[$i];
}
return $code[$checksum % 11];
}
// 将15位身份证升级到18位
function convertIDCard15to18($IDCard) {
if (strlen($IDCard) != 15) {
return false;
} else {
// 如果身份证顺序码是996 997 998 999,这些是为百岁以上老人的特殊编码
if (array_search(substr($IDCard, 12, 3), array('996', '997', '998', '999')) !== false) {
$IDCard = substr($IDCard, 0, 6) . '18' . substr($IDCard, 6, 9);
} else {
$IDCard = substr($IDCard, 0, 6) . '19' . substr($IDCard, 6, 9);
}
}
$IDCard = $IDCard . calcIDCardCode($IDCard);
return $IDCard;
}
// 18位身份证校验码有效性检查
function check18IDCard($IDCard) {
if (strlen($IDCard) != 18) {
return false;
}
$IDCardBody = substr($IDCard, 0, 17); //身份证主体
$IDCardCode = strtoupper(substr($IDCard, 17, 1)); //身份证最后一位的验证码
if (calcIDCardCode($IDCardBody) != $IDCardCode) {
return false;
} else {
return true;
}
}
var_dump(validateIDCard('123456789987654321'));die;

PHP 身份证验证方法相关推荐

  1. windows 中 vpn连接提示, 虚拟专用网络 由于RAS/虚拟专用网络,服务器上配置的某个策略,服务器用于验证用户名和密码的身份验证方法可能与连接配置文件中的身份证验证方法不匹配

    windows 虚拟专用网络 由于RAS/虚拟专用网络,服务器上配置的某个策略,服务器用于验证用户名和密码的身份验证方法可能与连接配置文件中的身份证验证方法不匹配 打开网络 更换网络适配器 选项 右键 ...

  2. 大陆居民身份证验证方法(java)

    1.设置接口 @Constraint(validatedBy = ChineseIdNumberValidator.class) @Target({ElementType.METHOD,Element ...

  3. 云豹php短视频源码实现身份证验证的方法

    云豹PHP短视频源码中,有一项关于"实名认证"身份证验证的功能,这是为了严格遵守国家法律法规的要求而设立的,实际上,日常生活中,我们在很多站点或APP注册时都被要求进行实名认证,有 ...

  4. 身份证发展及验证方法简史(人证同一性)

    份证及验证的发展史 用于证明持有人身份的证件叫做身份证, 多由各国或地区政府发 行予公民. 它将作为每个人独一无二的公民身份的证明工具. 大量新 技术的出现允许身份证包含生物统计学信息于其中, 如照片 ...

  5. JQueryEasyUI validatebox 扩展其自带验证方法

    JQueryEasyUI validatebox自带了几种自带的验证方法,比如非空.邮箱.异步.字符长短等验证方式,但是这些远远满足不了我们自己的使用,先整理了一些扩展方法,使其验证方式更为丰富! 1 ...

  6. 封装jQuery Validate扩展验证方法

    一.封装自定义验证方法-validate-methods.js /*****************************************************************jQ ...

  7. 什么学习软件需要身份证验证_什么是两层身份验证,为什么我需要它?

    什么学习软件需要身份证验证 More and more banks, credit card companies, and even social media networks and gaming ...

  8. struts2自定义验证器(身份证验证)

    struts2的验证器是用的xwork里面的验证,自定义验证器就是根据源码继承已有的字段验证器而来.具体步骤如下: 1.展开xwork-2.0.4.jar,com.opensymphony.xwork ...

  9. 涨知识!细数银行卡三要素 API 的 N 种验证方法

    引言 银行卡三要素验证 API 是一种基于姓名.身份证号码和银行卡号等三种信息的验证服务,主要用于绑定银行卡时校验银行卡是否为该身份信息所有.手机号是否为银行卡绑定手机号. 银行卡三要素 API 的验 ...

  10. laravel身份证验证_简单的Laravel登录身份验证

    laravel身份证验证 This article has been upgraded to work with Laravel 4.1.26 本文已升级为可与Laravel 4.1.26一起使用 T ...

最新文章

  1. 不好好学习会被AI开除的!俄罗斯校园将启用AI,识别差生,建议开除
  2. bzoj 2435: [Noi2011]道路修建【树形dp】
  3. spring boot 核心_SpringBoot 核心技术 — 自动配置
  4. RAPID 信号的互锁和同步 WaitTestAndSet 和 TestAndSet
  5. 分布式系统与消息投递
  6. php在线考试系统源代码_php实现在线考试系统
  7. Java springboot B2B2C o2o多用户商城 springcloud架构-(十)高可用的服务注册中心
  8. python控制屏幕亮度_使用Python脚本更改显示器亮度
  9. 轨迹跟踪—线性 MPC 控制算法
  10. 计算机画图照片大小,如何压缩图片大小,用电脑系统自带画图工具即可
  11. softmax函数反向传播
  12. html生日祝福心形,心形生日祝福QQ空间个性留言代码_送你的
  13. Kickstart无人值守安装
  14. 微信小程序几种常用弹窗提示方法
  15. 马达震动测试软件,电机震动如何测试
  16. 地下水、土壤、地质、环境人看过来
  17. 【独家原创】 cs1.6美女模型用于1.5站立不倒解决办法
  18. 数学思想——1.SEIR模型
  19. first-child
  20. 思科服务器查看生成树协议,思科基于端口的生成树协议命令

热门文章

  1. python 网格搜索_Python机器学习:6.4 通过网格搜索调参
  2. →箭头符号大全复制_特别符号大全,特殊符号大全
  3. Cocos Creator 实现虚拟摇杆
  4. Object-C 函数参数语法
  5. 一键查看MTALAB支持的字体
  6. java preference xml,java – 找不到PreferenceScreen类
  7. 运筹系列77:开源线性规划软件clp使用简介
  8. Linux本地网络软件仓库搭建
  9. 位图(标量图)与矢量图区别
  10. python中每个if条件后面都要使用冒号_每个if条件后面都要使用冒号