摘要:一个合法的身份证号码共18位,由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前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  3  4  5  6  7  8  9  10(删掉了2)

M:1  0  9  8  7  6  5  4  3  2(删掉了2对应的X)

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入、输出格式:

输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码,18位必须全部是数字。

不检验身份证前17位是否合理,只检查对前17位计算出的校验码是否与身份证第18位一致。如果一致,则输出“身份证号 passed”,否则输出“身份证号 Fail”。

测试用例:

320124198808240056

320124198808240056 Passed

110108196711301866

110108196711301866 Fail

#include<stdio.h>
#include<math.h>
int main(){int N,bit,i,b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t,Z;int x;long long int a;scanf("%d\n",&N);for(x=1;x<=N;x++){scanf("%lld",&a);b=a/pow(10,17);c=(a-b*pow(10,17))/pow(10,16);d=(a-b*pow(10,17)-c*pow(10,16))/pow(10,15);e=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15))/pow(10,14);f=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14))/pow(10,13);g=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13))/pow(10,12);h=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12))/pow(10,11);j=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11))/pow(10,10);k=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10))/pow(10,9);l=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9))/pow(10,8);m=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9)-l*pow(10,8))/pow(10,7);n=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9)-l*pow(10,8)-m*pow(10,7))/pow(10,6);o=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9)-l*pow(10,8)-m*pow(10,7)-n*pow(10,6))/pow(10,5);p=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9)-l*pow(10,8)-m*pow(10,7)-n*pow(10,6)-o*pow(10,5))/pow(10,4);q=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9)-l*pow(10,8)-m*pow(10,7)-n*pow(10,6)-o*pow(10,5)-p*pow(10,4))/pow(10,3);r=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9)-l*pow(10,8)-m*pow(10,7)-n*pow(10,6)-o*pow(10,5)-p*pow(10,4)-q*pow(10,3))/pow(10,2);s=(a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9)-l*pow(10,8)-m*pow(10,7)-n*pow(10,6)-o*pow(10,5)-p*pow(10,4)-q*pow(10,3)-r*pow(10,2))/10;t=a-b*pow(10,17)-c*pow(10,16)-d*pow(10,15)-e*pow(10,14)-f*pow(10,13)-g*pow(10,12)-h*pow(10,11)-j*pow(10,10)-k*pow(10,9)-l*pow(10,8)-m*pow(10,7)-n*pow(10,6)-o*pow(10,5)-p*pow(10,4)-q*pow(10,3)-r*pow(10,2)-s*10;i=b*7+c*9+d*10+e*5+f*8+g*4+h*2+j*1+k*6+l*3+m*7+n*9+o*10+p*5+q*8+r*4+s*2;Z=i%11;if(Z==0&&t==1){printf("%lld Passed",a);continue;}if(Z==1&&t==0){printf("%lld Passed",a);continue;}if(Z==3&&t==9){printf("%lld Passed",a);continue;}if(Z==4&&t==8){printf("%lld Passed",a);continue;}if(Z==5&&t==7){printf("%lld Passed",a);continue;}if(Z==6&&t==6){printf("%lld Passed",a);continue;}if(Z==7&&t==5){printf("%lld Passed",a);continue;}if(Z==8&&t==4){printf("%lld Passed",a);continue;}if(Z==9&&t==3){printf("%lld Passed",a);continue;}if(Z==10&&t==2){printf("%lld Passed",a);continue;}else{printf("%lld Fail",a);continue;}return 0;}
}

检验身份证号的有效性并输出有问题的号码相关推荐

  1. python 身份证号的有效性、生日(阴历阳历)、星座、生肖、性别、年龄、户籍所在地测试

    python 身份证号的有效性.生日(阴历阳历).星座.生肖.性别.年龄.户籍所在地测试 0x01 前言 0x02 身份证号码格式 0x03 地区 0x04 代码 0x05 效果 0x01 前言 本项 ...

  2. 用python实现身份证号的解析(输出性别,生日,生肖,星座)

    用python实现身份证号的解析,输出性别,生日,生肖,星 实现功能: 1.解析生日 2.解析性别 3.解析所在省份 4.解析生肖,星座 代码如下: ID=input('请输入18位身份证号码:'); ...

  3. 检验身份证号的唯一性

    检验身份证号的唯一性 controller //检验身份证号的唯一性 protected void card(HttpServletRequest request, HttpServletRespon ...

  4. 在Excel中检验身份证号

    近几日,我的工作是录入更正的农业直补农户资料,涉及到了各包村干部上报的各种样式的报表,经会计清点后,由我来统一按上报的格式来摘抄到上报表中.据会计说,我的字写得还过得去,比小代强. 我建议用计算机来处 ...

  5. oracle手机号码检验字数_oracle 检验身份证号是否正确基本方法

    此前在文章中给出了函数和存储过程是如何判断身份证号是否是正确的,下面我详列下判断方法: 1.号码的结构 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地 ...

  6. C# 检验身份证号并提取生日和性别

    /// <summary>         /// 验证身份证号码         /// </summary>         /// <param name=&quo ...

  7. 汇编课设:实现身份证号验证功能并输出上面所给的信息

    1.原题再现: 输入一个学生的身份证号码,程序检验身份证号码是否合法.并显示省份.年龄.性别等信息. 下面是身份证号码的规则: 身份证号码共18位.前6位是地址码,7–14位是出生年月日,后面4位是生 ...

  8. js身份证号有效性验证

    js身份证号有效性验证 1.简述 最近做的系统有用到实名验证的,起初对于用户身份证号只是简单地使用正则表达式进行验证, 很多无效的身份证号就成了漏网之鱼. 导致后台存表里很多无效的身份证号,随便输入用 ...

  9. JS代码:身份证号EMAIL检验

    结果: <%@page import="com.sun.xml.internal.txw2.Document"%> <%@ page language=" ...

最新文章

  1. python对视频画框标记后保存
  2. Single-Shot Object Detection with Enriched Semantics
  3. Asp程序做页面的301跳转,使得cnasda.com跳转到www.cnasda.com
  4. Manacher 例题讲解
  5. 【51单片机快速入门指南】6.3:DS18B20 单总线数字温度计的多路读取
  6. 大家都在用这个神器分析数据,而你还只会Excel表头过滤?
  7. linux 创建进程 execl,linux中进程的vfork()和execl()函数
  8. HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)
  9. 【机器学习】如何使用随机网格搜索,以缩短网格搜索速度?
  10. lora 调制解调器计算器_如何将Android手机用作调制解调器; 无需生根
  11. XYNU—ACM暑假集训第三次测试 贪心算法
  12. C++实现 L1-054 福到了 (15分)
  13. 右键快捷菜单压缩文件的消失问题解决办法!
  14. [iOS开发]iPhoneX系列顶部和底部尺寸图解
  15. “压缩(zipped)文件夹“G:\Program\Wechat WeChatFiles(wxid cqpx72n77z9x22 FileStorage\File 2022-12 基...
  16. Mitmproxy代理设置和证书安装
  17. 如何克服焦虑,不安,紧张
  18. Snort:Barnyard2+MySQL+BASE 基于Ubuntu 14.04SNORT
  19. PIL批量更改图片像素大小,python
  20. Socket 网络协议 等

热门文章

  1. 高清:2口VGA分配器的使用与原理
  2. echarts 饼图美化
  3. oracle longtext类型,ORACLE的ALL_VIEWS数据字典text字段long类型问题
  4. 面相学论眼睛:看眼形善与不善
  5. 集美大学 Python_02_复习
  6. IoT黑板报:MIT研发出了新型芯片技术
  7. 猜数字游戏随机生成一个随机数,并给玩家三次机会猜测
  8. 数据分析的MECE法则:
  9. Linux 使用 you-get 指令下载网页视频
  10. 云梦html制作工具(html傻瓜式制作软件)v1.0