鱼C论坛

 找回密码
 立即注册
查看: 1076|回复: 2

[已解决]验证身份证的真伪

[复制链接]
发表于 2020-11-27 15:44:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
写一个程序,验证所报身份证号码是真是假

请输入身份证号码:
输入:11010519491231002X

输出:输入身份证为真            或:
输出:输入身份证为假
最佳答案
2020-11-27 16:23:20
  1. #include "stdio.h"

  2. int main(int argc, char* argv[])
  3. {
  4.         int i, T, sum = 0;
  5.        
  6.         char a[18];    //int a[18];//身份证的18位数字
  7.         int b[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };    //前17位数的系数
  8.         char c[11] = { 'f' };    //存放校验结果
  9.        
  10.         printf("请输入身份证号码:");
  11.         for (i = 0;i < 18;i++)
  12.         {
  13.                 scanf("%c", &a[i]);
  14.         }

  15.         for (i = 0;i < 17;i++)    // sum = sum + a[i] * b[i]
  16.         {
  17.                 sum += (a[i] - '0') * b[i];
  18.         }
  19.        
  20.         T = sum % 11;
  21.         switch (T)
  22.         {
  23.         case 0: c[0] = '1';break;
  24.         case 1: c[1] = '0';break;
  25.         case 2: c[2] = 'X';break;
  26.         case 3: c[3] = '9';break;
  27.         case 4: c[4] = '8';break;
  28.         case 5: c[5] = '7';break;
  29.         case 6: c[6] = '6';break;
  30.         case 7: c[7] = '5';break;
  31.         case 8: c[8] = '4';break;
  32.         case 9: c[9] = '3';break;
  33.         case 10: c[10] = '2';break;
  34.         }

  35.         if (c[T] == a[17])
  36.         {
  37.                 printf("输入身份证为真\n");
  38.         }
  39.         else
  40.         {
  41.                 printf("输入身份证为假\n");
  42.         }

  43. }
复制代码

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-11-27 16:23:20 | 显示全部楼层    本楼为最佳答案   
  1. #include "stdio.h"

  2. int main(int argc, char* argv[])
  3. {
  4.         int i, T, sum = 0;
  5.        
  6.         char a[18];    //int a[18];//身份证的18位数字
  7.         int b[17] = { 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 };    //前17位数的系数
  8.         char c[11] = { 'f' };    //存放校验结果
  9.        
  10.         printf("请输入身份证号码:");
  11.         for (i = 0;i < 18;i++)
  12.         {
  13.                 scanf("%c", &a[i]);
  14.         }

  15.         for (i = 0;i < 17;i++)    // sum = sum + a[i] * b[i]
  16.         {
  17.                 sum += (a[i] - '0') * b[i];
  18.         }
  19.        
  20.         T = sum % 11;
  21.         switch (T)
  22.         {
  23.         case 0: c[0] = '1';break;
  24.         case 1: c[1] = '0';break;
  25.         case 2: c[2] = 'X';break;
  26.         case 3: c[3] = '9';break;
  27.         case 4: c[4] = '8';break;
  28.         case 5: c[5] = '7';break;
  29.         case 6: c[6] = '6';break;
  30.         case 7: c[7] = '5';break;
  31.         case 8: c[8] = '4';break;
  32.         case 9: c[9] = '3';break;
  33.         case 10: c[10] = '2';break;
  34.         }

  35.         if (c[T] == a[17])
  36.         {
  37.                 printf("输入身份证为真\n");
  38.         }
  39.         else
  40.         {
  41.                 printf("输入身份证为假\n");
  42.         }

  43. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-27 19:11:19 | 显示全部楼层
  1. #include<stdio.h>
  2. unsigned char i, weight[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 }, code[] = { 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
  3. unsigned short sum = 0;


  4. int main() {
  5.     for (i = 0; i < 17; i++) {
  6.         sum += (getchar() - '0') * weight[i];
  7.     }

  8.     sum = code[sum % 11];
  9.     i = getchar();

  10.     if (i - 'X') {
  11.         i -= '0';
  12.     }
  13.     else {
  14.         i = 10;
  15.     }

  16.     puts(i - sum ? "输入身份证为假" : "输入身份证为假");
  17.     return 0;
  18. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-9 03:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表