代码语言: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;
}
说明:
- 身份证号码里各位数据都有各自的含义,本例便是依据这些来判断身份证号码的正确性。
- 程序中使用字符串指针作为参数,通过下标的形式,分别对指定位置的数据进行校验,最终校验出身份证号码的正确性。