一、身份证第18位(校验码)的计算方法 :
 1、将前面的身份证号码17位数分别乘以不同的系数。
从第一位到第十七位的系数分别为:
7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。
 2、将这17位数字和系数相乘的结果相加。
 3、用加出来和除以11,看余数是多少?
 4、余数只可能有
0-1-2-3-4-5-6-7-8-9-10这11个数字。
其分别对应的最后一位身份证的号码为
1-0-X-9-8-7-6-5-4-3-2。

5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2。
 例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。
 首先我们得出前17位的乘积和是189,然后用189除以11得出的结果是17+2/11,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的数字是x。所以,可以判定这是一个合格的身份证号码。

public function checkIdCard($id_num) {$sex = 0;//转换性别$sexArr = [1, 0];$sex = $sexArr[(int)$sex];$length = mb_strlen($id_num);if ($length != 18) {echo '身份证号码少于18位!';exit;}// $idCard = strtoupper($id_num);$idCard = trim($id_num);//最后一位$last = mb_substr($idCard, 17, 1);//最后第二位,判断性别$checkSex = mb_substr($idCard, 16, 1);//前17位数字$checkCard = str_split(mb_substr($idCard, 0, 17));//乘法数组$multiply = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);//一$count = array_sum(array_map(function ($a, $b) {return $a * $b;}, $checkCard, $multiply));//二$count = 0;foreach ($checkCard as $key => $val) {$count += $val * $multiply[$key];}//余数$result = $count % 11;//余数数组$remainder = range(0, 10);//余数对应数组$array = array(1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2);$combine = array_combine($remainder, $array);echo $combine[$result];die;if ($combine[$result] != $last) {echo '请填写真实身份证号码!';exit;}if ($checkSex % 2 != $sex) {echo '性别错误!';exit;}echo 1;}

验证18位身份证真实性相关推荐

  1. java中验证18位身份证的正则表达式

    import java.util.regex.Matcher; import java.util.regex.Pattern; /** *只可以验证输入的身份证是否为18位,不可以验证身份证的正确性 ...

  2. .Net验证18位身份证格式

    /// <summary>/// 验证18位号码/// </summary>/// <param name="Id"></param> ...

  3. 比较严谨的java验证18位身份证号码

    /** * 我国公民的身份证号码特点如下* 1.长度18位* 2.第1-17号只能为数字* 3.第18位只能是数字或者x* 4.第7-14位表示特有人的年月日信息* 请实现身份证号码合法性判断的函数, ...

  4. mysql根据严格校验15位和18位身份证号是否有效的自定义函数

    验证18位身份证有效性的规则: 1.长度: 2.区划编码: 3.出生日期: 4.最后一位验证: 第一步:对身份证做去空处理: 第二步:对15位身份证号进行验证: 第三步:对18位身份证进行验证: 最后 ...

  5. javascript 15位和18位身份证的正则表达式及其验证

    1.简单的正则表达式: (1)preg_match("/^(\d{18,18}|\d{15,15}|\d{17,17}x)$/",$id_card) (2)preg_match(& ...

  6. 15/18位身份证号码验证的正则表达式总结(详细版)

    前言 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 介绍 xxxxxx yyyy MM d ...

  7. java字符串应用之18位身份证格式验证

    公民身份号码是特征组合码,由17位数字本体码和1位数字校验码组成.排列顺序从左至右依次为:6位数字地址码.8位数字出生日期码,3位数字顺序码和1位数字校验码.     地址码:表示编码对象常住户口所在 ...

  8. 18位身份证号码规则及js验证

    2019独角兽企业重金招聘Python工程师标准>>> 一.中国居民身份证号码规则 18位身份证号码编码规则:根据[中华人民共和国国家标准 GB 11643-1999]中有关公民身份 ...

  9. 身份证校验(//身份证号合法性验证 //支持15位和18位身份证号//支持地址编码、出生日期、校验位验证)

    window.checkIdNumber=(function () {var vcity = {11: "北京", 12: "天津", 13: "河北 ...

  10. MySQL正则表达式判断身份证_15/18位身份证号码验证的正则表达式总结(详细版)...

    前言 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 介绍 xxxxxx yyyy MM d ...

最新文章

  1. 一个感染型的病毒逆向分析
  2. 成对的歌曲,其总持续时间可被60整除
  3. 与计算化学相关的计算机程序,计算机引发化学工程革命
  4. 【maven详解-插件】maven插件学习之maven-source-plugin
  5. linux c语言头文件 在另外的地方,linux下的c语言的头文件在windows下头文件是哪几个?...
  6. 常用串口监控软件:Accessport,ComMonitor,Device Monitoring Studio
  7. FFmpeg入门详解之52:ffplay源码分析
  8. dcdc转换器计算机显示,DC-DC转换器的问题
  9. python加粗线宽代码_python-在matplotlib中同时更改线宽和颜色
  10. eth1 does not seem to be present, delaying initialization
  11. 无中介租房搜房工具 V1.0
  12. 阿里云国际站:云端实时渲染 阿里云用算力让三星堆“活过来”
  13. 【自媒体必备】AI文字转语音,支持多种人声选择,在线生成一键导出【电脑永久版】
  14. 游戏手柄按键遥杆值检测
  15. 安装Linux Mint 18.2后要做的20件事
  16. python排序获得秩 (index)
  17. 【花雕体验】11 上手ESP32C3
  18. linux u盘更新程序,嵌入式linux下插u盘自动更新的设计
  19. 为什么说无线互联网将呈现井喷态势
  20. Firefox火狐浏览器关闭之后再也打不开了 怎么破?

热门文章

  1. kotlin遍历数据同时删除之利用kotlin迭代器安全删除
  2. Python-并发、并行、协成的简易理解
  3. SQL2008 视频教程 SQL Server 2008高级视频教程
  4. (2021)建筑能耗模拟的灰箱建模与应用——综述
  5. python 004 __小斌文档 | 判断和循环
  6. Supervised Contrastive Learning 论文学习
  7. 03-什么是Mach-O文件?
  8. 《Linux篇》超详细安装FinalShell并连接Linux教程
  9. Hadoop 启动 HDFS DataNode 时报错:Invalid dfs.datanode.data.dir
  10. 技术文档的版本说明格式