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

2022-05-30 16:10:24 浏览数 (1)

代码语言:javascript复制
//
// @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;
}

说明:

  • 身份证号码里各位数据都有各自的含义,本例便是依据这些来判断身份证号码的正确性。
  • 程序中使用字符串指针作为参数,通过下标的形式,分别对指定位置的数据进行校验,最终校验出身份证号码的正确性。

0 人点赞