栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 身份证规则测验

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 身份证规则测验

将18位的身份证号的前17位与对应的加权因子相乘对11取余,然后余数对应的code就应该是身份证号的第18位,获取到的值与第十八位相比如果相等,那就校验通过。

我们以11111111111111111(17个1)这个数字为例

17 位的加权因子分别是 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2

int arr[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//系数

然后进行1*7+1*9+1*10+1*5+1*8+1*4+1*2+1*1+1*6+1*3+1*7+1*9+1*10+1*5+1*8+1*4+1*2

进行求和结果等于100

然后进行100%11=1

将结果1与下表对照,如果一致,则符合规则;反之,不符合规则

char brr[] =  {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};

代码如下:

#include
#include 
#include 
//true  1
//flase 0;
bool Id_Card(const char *str)
{
	int count = 0;//保存最后的和
	int arr[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};//系数

	for(int i=0; i<=16; i++)
	{
		//count = count + (str[i]-'0') * arr[i];
		count += (str[i]-'0') * arr[i];
	}

	count = count % 11;

	char brr[] =  {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};

	return str[17] == brr[count];
	//return true;   //return 1
	//return fasle;  //return 0;
}
int main()
{
	const char *str = "53010219200508011X";
	bool A = Id_Card(str);
	if(A)
	{
		printf("符合规则");
	}
	else
	{
 		printf("不符合规则");
	}
	return 0;
}

运行结果:

符合规则

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925755.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号