问题描述

我国国标〖GB 11643-1999〗中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。其校验码(最后一位)计算方法和步骤为:

(1)十七位数字本体码加权求和公式

S = Sum(Ai * Wi), i = 0, … , 16 ,先对前17位数字的权求和

其中Ai:表示第i位置上的身份证号码数字值

Wi:表示第i位置上的加权因子,前17位加权因子从左到右分别为

Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

(2)计算模

Y = mod(S, 11)

(3)通过模Y查下表得到对应的校验码

Y 0 1 2 3 4 5 6 7 8 9 10
校验码 1 0 X 9 8 7 6 5 4 3 2

例如:某身份证前17位为11010519491231002

i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
1 1 0 1 0 5 1 9 4 9 1 2 3 1 0 0 2
7 9 0 5 0 20 2 9 24 27 7 18 30 5 0 0 4

得到和为:167;则模为y=167%11=2

查(3)得校验码为X(大写)

请按上面所述步骤编程,输入一个二代身份证号,检查该身份证是否正确。

输入形式

输入若干行,每行一个身份证号码,最后一行输入-1

输出形式

输出1代表正确,0代表错误

样例输入

120223198902021249
130132199210293822
130402198207290622
-1

样例输出

1
1
0

参考代码

#include<iostream>
using namespace std;
int main(){int w[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};char y[11]={'1','0','X','9','8','7','6','5','4','3','2'};while(1){char num[18];cin>>num[0];if(num[0]=='-')break;//判断-1int sum=0;for(int i=1;i<18;i++)cin>>num[i];for(int i=0;i<17;i++)sum+=(num[i]-48)*w[i];sum%=11;if(num[17]==y[sum])cout<<'1'<<endl;else cout<<'0'<<endl;}
}

【程序设计训练】4-18 身份证校验相关推荐

  1. 湖南大学21夏训练四18.身份证校验

    [问题描述] 我国国标[GB 11643-1999]中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字 ...

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

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

  3. Python计算身份证第18位(校验码)来判断身份证是否输入正确

    Python计算身份证第18位(校验码)来判断身份证是否输入正确 前言 身份证编码规则如下:根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由 ...

  4. 中国大陆18位身份证校验算法(附JS实现)

    大陆18位身份证(第二代身份证)结构:(如下图所示) 身份号码是一组具有特征组合码,由十七位数字本体码和一位校验码组成. 排列顺序从左至右依次为:六位数字地区码,八位数字生日码,三位数字顺序码和一位数 ...

  5. Java身份证号码严格验证(第18位校验码算法实现)

    /*** 身份证号码的格式:610821-20061222-612-X 由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,* 第18位为校验码.检验码分别是0-10共 ...

  6. mysql身份证校验码_用sql实现18位身份证校验代码分享 身份证校验位计算

    身份证校验码的计算方法 1.将前面的身份证号码17位数分别乘以不同的系数.第i位对应的数为[2^(18-i)]mod11.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 ...

  7. ES01 数据类型、正则表达式、身份证校验

    1 基本数据类型 参见W3C的教程即可 2 正则表达式 参考博文:点击前往 3 身份证校验 参考博文:点击前往 <div class="panel panel-primary" ...

  8. sql判断邮箱是否合法_分享一个oracle身份证校验函数,判断你的身份证是否合法...

    概述 有个朋友说能不能用函数来实现对身份证的校验,所以这里用Oracle的函数来实现,其他数据库异曲同工.. 身份证校验函数 CREATE OR REPLACE FUNCTION Func_check ...

  9. 【补充一则】身份证校验的c#代码

    关于身份证号码的校验,网上的各种代码实在太多了.这里我补充一则C#的代码. 在网页上,通常是一个textbox让用户输入,然后用一个正则表达式验证控件,用这样一个正则表达式:\d{17}[\d|X]| ...

最新文章

  1. oracle之TNS:无监听程序解决办法
  2. 安卓实现记住密码登陆功能
  3. matlab读入txt数据_教程合集 | MATLAB文件读写(以nc与txt为例)
  4. 《视频直播技术详解》系列之一:开篇
  5. 实现DDD领域驱动设计: Part 2
  6. 7-8 哈利·波特的考试 (25 分)(详解+思路分析)真香啊
  7. 用四位led数码管作显示器的篮球比赛24秒计时器求c语言代码,单片机编程控制LED七段数码管作显示的篮球赛计时计分系统...
  8. Java7----ForkJoin框架
  9. JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
  10. AutoCAD批量提取坐标点的三种方法
  11. nginx代理服务器
  12. exlc表格怎么换行_excel表格怎么设置文字自动换行
  13. mysql 转大写_mysql将字符串转换为大写的方法
  14. cnode社区vue和react渲染
  15. centos7 查看multipath服务状态是start condition failed,/etc/multipath.conf was not met
  16. paired-end reads的拼接
  17. 99.扩展.霍尔三维结构方法论 vs 切克兰德方法论
  18. python框架之flak学习笔记
  19. Matlab的residuez和residue的区别,举例
  20. 输出指定要求的回文日期与字符串拼接

热门文章

  1. JSP动态生成table并输出为Excel
  2. 使用虚拟机创建本地服务器
  3. 计算机启动蓝屏,电脑一开机就蓝屏,详细教您电脑一开机就蓝屏怎么解决
  4. 【LeetCode】题解笔记
  5. 修改文件后缀的C语言实现
  6. linux sftp没有读写权限,Linux下SFTP用户权限设置条件及实现命令
  7. 使用JS获取当前页面的URL(网址信息)
  8. JUSE-QIMS一体化质量管理系统丨代理商
  9. 关于Redis 启动命令
  10. OSChina 周五乱弹 —— 前老板借前前员工钱给现员工发工资