鱼C论坛

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

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

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

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

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

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

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

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

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

        for (i = 0;i < 17;i++)    // sum = sum + a[i] * b[i]
        {
                sum += (a[i] - '0') * b[i];
        }
        
        T = sum % 11;
        switch (T)
        {
        case 0: c[0] = '1';break;
        case 1: c[1] = '0';break;
        case 2: c[2] = 'X';break;
        case 3: c[3] = '9';break;
        case 4: c[4] = '8';break;
        case 5: c[5] = '7';break;
        case 6: c[6] = '6';break;
        case 7: c[7] = '5';break;
        case 8: c[8] = '4';break;
        case 9: c[9] = '3';break;
        case 10: c[10] = '2';break;
        }

        if (c[T] == a[17])
        {
                printf("输入身份证为真\n");
        }
        else
        {
                printf("输入身份证为假\n");
        }

}

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

        for (i = 0;i < 17;i++)    // sum = sum + a[i] * b[i]
        {
                sum += (a[i] - '0') * b[i];
        }
        
        T = sum % 11;
        switch (T)
        {
        case 0: c[0] = '1';break;
        case 1: c[1] = '0';break;
        case 2: c[2] = 'X';break;
        case 3: c[3] = '9';break;
        case 4: c[4] = '8';break;
        case 5: c[5] = '7';break;
        case 6: c[6] = '6';break;
        case 7: c[7] = '5';break;
        case 8: c[8] = '4';break;
        case 9: c[9] = '3';break;
        case 10: c[10] = '2';break;
        }

        if (c[T] == a[17])
        {
                printf("输入身份证为真\n");
        }
        else
        {
                printf("输入身份证为假\n");
        }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-27 19:11:19 | 显示全部楼层
#include<stdio.h>
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 };
unsigned short sum = 0;


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

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

    if (i - 'X') {
        i -= '0';
    }
    else {
        i = 10;
    }

    puts(i - sum ? "输入身份证为假" : "输入身份证为假");
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 13:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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