博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2012蓝桥杯【初赛试题】身份证
阅读量:6432 次
发布时间:2019-06-23

本文共 1155 字,大约阅读时间需要 3 分钟。

题目描述:

  如果让你设计个程序,用什么变量保存身份证号码呢?长整数可以吗?不可以!

  因为有人的身份证最后一位是"X"
  实际上,除了最后一位的X,不会出现其它字母!
  身份证号码18位 = 17位 + 校验码
  校验码的计算过程:
  例如:身份证前17位 = ABCDEFGHIJKLMNOPQ
  
  A~Q 每位数字乘以权值求和(每位数字和它对应的“权”相乘后累加)
  17位对应的权值分别是:
  7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
  求出的总和再对11求模
  然后按下表映射:
  余数     0   1   2   3   4   5   6   7   8   9   10 
  校验码: 1   0   X   9   8   7   6   5   4   3   2 
  下面的代码实现了校验过程,输入串为身份证前17位,打印出校验码。
char verifyCode(char* s)
{
static int weight[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
static char map[] = {'1','0','X','9','8','7','6','5','4','3','2'};
int sum = 0;
for(int i=0; i<17; i++)
{
sum += (_________) * weight[i];  // 填空
}
return map[__________];  // 填空
}

答案:

1.  s[i]-'0'

2.  sum%11

第一个空很容易忘记减去’0‘,因为s是字符数组,所以字符对应的数字应该减去0;

因为校验码数组的序号跟余数是一致的,所以结果应该是sum%11即余数。

完整程序代码(可以输入自己的身份证号前17位进行测试):

#include
using namespace std;char verifyCode(char* s){ static int weight[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; static char map[] = {'1','0','X','9','8','7','6','5','4','3','2'}; int sum = 0; for(int i=0; i<17; i++) { sum += (s[i]-'0') * weight[i]; // 填空 } cout<
<
>s[i]; s[17] = verifyCode(s); for(int i=0;i<18;i++)cout<

转载于:https://www.cnblogs.com/zhezh/p/3773320.html

你可能感兴趣的文章
硬盘存储双寡头之争 希捷重注中国市场或赢大丰收
查看>>
淘宝电影联合华谊的数据报告,还有哪些重要信息?
查看>>
编译安装PHP
查看>>
css position:static 的使用
查看>>
nfs永久挂载与临时挂载
查看>>
linux查看网络链接状况命令之-netstat
查看>>
我的友情链接
查看>>
UIView的layoutSubviews和drawRect方法何时调用
查看>>
mysql主从同步
查看>>
制作最简化的Linux系统
查看>>
我的友情链接
查看>>
使用List的remove方法需要的注意的问题
查看>>
Ansible的介绍、安装、配置及常用模块介绍
查看>>
编码列表
查看>>
eigrp 配置
查看>>
谈一谈 redis 集群
查看>>
concurrent包
查看>>
分区和格式化硬盘
查看>>
在Linux下调试Python代码的各种方法
查看>>
centos7塔建MQ服务器
查看>>