首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C语言实例:检查身份证号码的正确性

C语言实例:检查身份证号码的正确性

作者头像
C语言中文社区
发布2022-05-30 16:10:24
发布2022-05-30 16:10:24
1.4K00
代码可运行
举报
文章被收录于专栏:C语言中文社区C语言中文社区
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
复制
//
// @author: 冲哥
// @date: 2021/7/10 10:40
// @description:C语言实现身份证号码的正确性检查

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

//搜索公众号C语言中文社区,后台回复“C语言”,免费获取200G编程资料。
// 身份证号码检测函数
int Chk18PaperId(const char* sPaperId)
{
    long lSumQT = 0;
    // 加权因子
    int R[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
    // 校验码
    char sChecker[11] = { '1','0','X', '9', '8', '7', '6', '5', '4', '3', '2' };

    // 检验长度
    if (18 != strlen(sPaperId))
    {
        return -1;
    }

    //校验数字
    int i = 0;
    for (i = 0; i < 18; i++)
    {
        if (!isdigit(sPaperId[i]) && !(('X' == sPaperId[i] || 'x' == sPaperId[i]) && 17 == i))
        {
            return -1;
        }
    }

    //验证最末的校验码
    for (i = 0; i <= 16; i++)
    {
        lSumQT += (sPaperId[i] - 48) * R[i];
    }

    if (sChecker[lSumQT % 11] != sPaperId[17])
    {
        return -1;
    }

    return 0;
}

// 主函数
int main()
{
    // 声明变量
    char Personal_ID[19];
    printf("请输入一个身份证号码:\n");

    while (1)
    {
        // 用户输入一个字符串身份证号码
        gets_s(Personal_ID,19);

        // 调用检测函数
        if (!Chk18PaperId(Personal_ID))
        {
            printf("合法\n");
            break;
        }
        else
        {
            printf("不合法\n请重新输入:\n");
            continue;
        }

    }

    // 使程序处于挂起状态,等待用户按键以继续操作
    system("pause");

    // 返回整形值0表示程序运行正确
    return 0;
}

说明:

  • 身份证号码里各位数据都有各自的含义,本例便是依据这些来判断身份证号码的正确性。
  • 程序中使用字符串指针作为参数,通过下标的形式,分别对指定位置的数据进行校验,最终校验出身份证号码的正确性。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言中文社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档