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<stdio.h>
#include <assert.h>
#include <math.h>
//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;
}

运行结果:

符合规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值