1.身份证号码的组成

公民身份证号码共18位,由十七位数字码和一位校验码组成。第18位校验码是由前17位计算得出的。

1-2位:省份代码
3-4位:城市代码
5-6位:区县(旗)代码
7-14位:出生日期
15-16位:顺序编码,由该辖区派出所指定,00-99
17位:性别,奇数代表男性,偶数代表女性
18位:校验码,由前17位计算得出

2.第18位校验码的计算规则:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2},然后将计算的和对11取模得到值Z,按照以下关系对应Z值与校验码M的值

Z 0 1 2 3 4 5 6 7 8 9 10
M 1 0 X 9 8 7 6 5 4 3 2

编写程序:输入有效身份证号的前17位,计算第18位校验码。

c++代码如下:

#include <iostream>
#include <string>
using namespace std;int main()
{char t[] = { '1','0','X','9','8','7','6','5','4','3','2' };string s = "";cout << "请输入身份证前17位:" ;while (1) {cin >> s;if (s.length() != 17) {s.clear();cout << "输入有误,请重新输入:";}else {break;}}int j = ((s[0] - '0') * 7 + (s[1] - '0') * 9 + (s[2] - '0') * 10 + (s[3] - '0') * 5 + (s[4] - '0') * 8 + (s[5] - '0') * 4 + \(s[6] - '0') * 2 + (s[7] - '0') * 1 + (s[8] - '0') * 6 + (s[9] - '0') * 3 + (s[10] - '0') * 7 + (s[11] - '0') * 9 + \(s[12] - '0') * 10 + (s[13] - '0') * 5 + (s[14] - '0') * 8 + (s[15] - '0') * 4 + (s[16] - '0') * 2) % 11;cout <<"第18位校验码为:" <<t[j] << endl;return 0;
}

程序运行结果:

3.身份证号码会重复吗?

通过上面的介绍,我们发现,对同一个县区的人来说,身份证号唯一性由身份证号码的15-17位这三位决定,同时,17位表示性别的各有五个数字。三位数字最多可以表示1000个(000-999),其中男性和女性各一半500个。

所以结论是:同一个县区同一天出生的同一性别的人数超过500个,身份证号才会有重复。那500是个什么概念呢?

根据国家统计局发布的《中华人民共和国2019年国民经济和社会发展统计公报》,2019年我国新生儿数量是1,465万,我国有县级行政区2862个,所以大致可以算一下平均每天每个县区的新生人口为:1465万/2862/365 ≈14。这还是不区分性别的,即便这样,这个数字离500还有很大的差距,所以实际上身份证号码基本是不可能重复的,只存在理论上的可能。

身份证校验码计算:根据身份证前17位计算第18位校验码-c++实现相关推荐

  1. python根据身份证前17位数计算第18位数

    #!/usr/bin/python # -*- coding:utf-8 -*- count=0 sum=0 result=0 sfz =  raw_input("请输入身份证前17位数:& ...

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

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

  3. java身份证工具类(校验身份证是否合法、通过身份证获取年龄、性别、生日,将15位身份证转为18位等)

    一.简介 因为工作需要经常用到身份证做一些相关操作,于是通过查阅资料总结出一些常用的工具方法,包括校验身份证是否合法.通过身份证获取年龄.通过身份证获取性别.通过身份证获取户籍地址.通过身份证获取生日 ...

  4. 18位身份证号码最后一位校验

    1 package com.jdk7.chapter5; 2 3 /** 4 * 仅能校验15位或18位身份证号的校验码 5 * @author Administrator 6 * 7 */ 8 pu ...

  5. C语言基础入门48篇_26_身份证号校验程序(以身份证的校验方式是实例加深对数组及函数封装的理解、字符-‘0‘得到字符对应的int类型数字)

    本篇根据以二代身份证的校验方式是实例加深对数组及函数封装的理解 1. 第二代身份证号的组成 第二代身份证号为18位,各位数字对应了不同的信息(以下顺序从左往右): AABBCCYYYYMMDDXXXV ...

  6. 使用Java编写Hive的UDF实现身份证号码校验及15位升级18位

    使用Java编写Hive的UDF实现身份证号码校验及15位升级18位 背景 在数仓项目中,有时候会根据身份证信息做一些取数filter或者条件判断的相关运算进而获取到所需的信息.古人是用Oracle做 ...

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

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

  8. Java 从身份证号码中获取出生日期、性别、年龄(15位和18位)

    项目场景: 提示:这次做项目的时候遇到一个工具,整理出来以后可以直接使用 问题描述:给一个String 类型的 身份证号码,需要从这串数字中获取出生日期.性别.年龄 身份证号码分为 15 位 和18 ...

  9. 15位或18位身份证验证

    c#实现的18位身份证格式验证算法 18位身份证标准在国家质量技术监督局于1999年7月1日实施的GB11643-1999<公民身份号码>中做了明确的规定. GB11643-1999< ...

  10. 查验身份证 (15 分)一个合法的身份证号码

    查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6, ...

最新文章

  1. thinkphp5 mysql长连接_tp5(thinkPHP5)框架连接数据库的方法示例
  2. Java 方法重载 方法重写
  3. 博为峰Java技术题 ——JavaEE Servlet 国际化Ⅲ
  4. 软件测试用python一般用来做什么-Python简直是万能的,这5大主要用途你一定要知道!...
  5. new和make的区别
  6. 「数据ETL」从数据民工到数据白领蜕变之旅(六)-将Python的能力嫁接到SSIS中...
  7. P4091-[HEOI2016/TJOI2016]求和【斯特林数,NTT】
  8. ReviewForJob——算法设计技巧(贪婪算法+分治算法+动态规划)
  9. zmail邮件系统安装手册 V2.0版本
  10. 进程调度实验_Linux应用编程之进程的PID与PPID
  11. 面向接口的开发到面向对象的编程
  12. Android应用开发环境搭建
  13. matlab gui简单教程
  14. 蝶KIS专业版替换SXS.dll补丁 遭后门清空数据被修改为“恢复数据请联系” 金蝶KIS12.2版本遭遇后门入侵,数据没有了!!应急处置
  15. Java中多个pdf文件合并为一个
  16. 世界黑客编程大赛第一名的作品
  17. 服务器运行时间设置,服务器的时间同步设置方法
  18. api接口—闲鱼搜索的数据
  19. 一篇文章搞懂 Hadoop RPC 到底是什么
  20. AIGC基础:从VAE到DDPM原理、代码详解

热门文章

  1. PHP:解析url和查询参数query
  2. javamail 超时_为什么JavaMail连接超时过长
  3. 如何在JMP中快速实现报表的个性化与可视化?
  4. 永洪BI-实现按钮输出文件
  5. 惠普传真服务器位置,惠普传真机的使用方法
  6. matlab进化树的下载,mega7进化树软件下载
  7. eclipse中添加subclipse插件
  8. C4D 展UV的那些坑
  9. cas 计算器 android,GeoGebra CAS计算器
  10. 真么找计算机用户密码,如何查找电脑的用户名和密码