检查身份证号码的正确性
// 项目名称:检查身份证号码的正确性
// 开发平台:
/*
操作系统:Windows 10 X64
开发环境:Visual Studio 2019
解决方案配置:Debug
解决方案平台:X86
*/
// 作者信息:
/*
作者:回车键
QQ:1737397473
QQ群:338191797
网易云课堂:C语言函数与案例
微信公众号:C语言函数与案例
*/
// 项目描述:
/*
身份证号码里各位数据都有各自的含义,本例便是依据这些来判断身份证号码的正确性。
程序中使用字符串指针作为参数,通过下标的形式,分别对指定位置的数据进行校验,最终校验出身份证号码的正确性。
*/
// 头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
// 身份证号码检测函数
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 (true)
{
// 用户输入一个字符串身份证号码
gets_s(Personal_ID);
// 调用检测函数
if (!Chk18PaperId(Personal_ID))
{
printf('合法\n');
break;
}
else
{
printf('不合法\n请重新输入:\n');
continue;
}
}
// 使程序处于挂起状态,等待用户按键以继续操作
system('pause');
// 返回整形值0表示程序运行正确
return 0;
}
赞 (0)