1031 查验身份证

简介: 1031 查验身份证

1031 查验身份证 (15 分)

一个合法的身份证号码由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 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2


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

输入格式:

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

输出格式:

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed

输入样例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出样例1:

12010X198901011234
110108196711301866
37070419881216001X

输入样例2:

2
320124198808240056
110108196711301862

输出样例2:

All passed

 


这题没有难度,照着规则做就可以了,就是要细心些。

这个题目的挺有意思,可以检验/推测身份证的最后一位校验码。这个题目是检验,其实稍微改一下就可以用身份证前17位求出最后一位的校验码。

 

 

#include<iostream>
#include<string>
#include<cctype>
using namespace std;
int main()
{
  char M[11] = { '1','0','X','9','8','7','6','5','4','3','2' };
  int quan[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };
  int N;
  cin >> N;
  string sfz[100];
  for (int i = 0; i < N; i++)
    cin >> sfz[i];
 
  string wrong[100];
  int n_wrong = 0;
  bool iswrong = false;
  int sum = 0;
  for (int i = 0; i < N; i++) {
    sum = 0;
    for (int j = 0; j < 17; j++) {
      if (!isdigit(sfz[i][j])) {
        iswrong = true;
        break;
      }
      sum += (sfz[i][j] - '0') * quan[j];  //这个地方不要忘记-'0'
    }
    int Z = sum % 11;
    if (sfz[i][17] != M[Z])
      iswrong = true;
    if (iswrong) {
      wrong[n_wrong++] = sfz[i];
      iswrong = false;
    }
  }
  for (int i = 0; i < n_wrong; i++)
    cout << wrong[i] << endl;
  if (n_wrong == 0)
    cout << "All passed";
  return 0;
}
相关文章
|
1月前
查发票|发票查验|验证码识别|批量查验|发票验真
昨天我开始对发票查验最耗时的环节-验证码识别下手,通过使用5000多张打码图片对PaddleOCR的模型进行训练后,识别率获得了很大提升。
27 1
|
1月前
各证件号码(身份证、护照、军官证、驾驶证、港澳台湾通行证、户口簿)正则表达式校验 完整正确
各证件号码(身份证、护照、军官证、驾驶证、港澳台湾通行证、户口簿)正则表达式校验 完整正确
180 0
|
1月前
|
固态存储
身份证,港澳通行证,台胞证,护照正则表达式
身份证,港澳通行证,台胞证,护照正则表达式
289 0
银行卡实名核验的工作原理
银行卡四要素API接口是用于验证银行卡真实性的一种接口,其原理主要是通过调用银行的身份验证系统,实现客户身份信息与银行卡绑定的过程。
|
存储 文字识别 小程序
小程序识别身份证,银行卡,营业执照,驾照
小程序识别身份证,银行卡,营业执照,驾照
|
CDN 架构师
没有“身份证”,网站无法在内陆通行!
没有“身份证”,网站无法在内陆通行!
125 0
没有“身份证”,网站无法在内陆通行!
L1-016 查验身份证 (15 分)
L1-016 查验身份证 (15 分)
143 0
7-54 查验身份证 (15 分)
7-54 查验身份证 (15 分)
82 0
2020-09-24L1-016 查验身份证
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。
113 0