7368:身份证的编码问题
描述
中国大陆居民导份证号码由18位数字组成:第1至6位的数字为地址代码,表示某省某市某区或县:第7至14位的数字代表
居民的出生年月日:第15至17位的数字代表同一辖区内、同年同月同日出生的顺序号,其中第17位数字表示性别,奇数
为男性,偶数为女性;第18位数字代表校验码。校验码是0~10这十个数字中的任意一个,其中10用X表示
校验码的计算方法如下:
1将身份证号码的前17位数学分别乘以对应的条数。对应关系如下:
号码位1234567 8 91011121314151617
系数7910584216379105842
2将17位数字和系数相乘的结果累计求和:
3用所求的和除以11得到条数
4用余数与导份证号码的最后一位校验码进行对应,对应关条如下:
输入身份证号码,输出出生日期、性别,实现判断最后一位校验码是否正确
输入
输入一行,为其身份证号码
输出
输出第一行为其出生日期,按照YYYY-MM-DD格式
第二行为其性别,如果为男输出”male”,如果为女输出female”
第三行为验证码是否正确,若正确输出“True,否则输出False”
样例输入
339005200208086214
样例输出
2002-08-08
ma1e
True
C++这个程序怎么写
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 记绘衣 2021-12-14 16:02关注
#include<bits/stdc++.h> using namespace std; int main() { string s; int c[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int d[11]={1,0,10,9,8,7,6,5,4,3,2}; cin>>s; cout<<s[6]<<s[7]<<s[8]<<s[9]<<"-"<<s[10]<<s[11]<<"-"<<s[12]<<s[13]<<endl; int a=s[16]-'0'; if(a%2==0) { cout<<"female"<<endl; } else { cout<<"male"<<endl; } int cunt=0; for(int i=0;i<s.length();i++) { int b=s[i]-'0'; cunt+=b*c[i]; } cunt%=11; a=s[17]-'0'; if(s[17]=='x') a=10; if(a==d[cunt]) { cout<<"true"<<endl; } else cout<<"false"<<endl; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 多址通信方式的抗噪声性能和系统容量对比
- ¥15 winform的chart曲线生成时有凸起
- ¥15 msix packaging tool打包问题
- ¥15 finalshell节点的搭建代码和那个端口代码教程
- ¥15 Centos / PETSc / PETGEM
- ¥15 centos7.9 IPv6端口telnet和端口监控问题
- ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
- ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
- ¥20 海浪数据 南海地区海况数据,波浪数据
- ¥20 软件测试决策法疑问求解答