很久没更新,贴点代码吧 身份证号码校验

#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
//身份证验证规则
void main(int argc,char **argv)
{
	if(argc<2 || strlen(argv[1])<18)
	{
		printf("请输入18位身份证号码");
		return;
	}
	int cr[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1};
	int mr[]={1,0,'X',9,8,7,6,5,4,3,2};
		

		char ids[20]={'\0'};
		sprintf(ids,"%s",argv[1]);
		ids[17]='\0';
		int idnum[17]={0};
		int i;
		for(i=0;i<strlen(ids);i++)
		{
			char ch[2]={'\0'};
			ch[0]=ids[i];
			idnum[i]=atoi(ch);
			
		}
		

		int s1=sizeof(idnum)/sizeof(int);
		int s2=sizeof(cr)/sizeof(int);
		int ts=0;
		
		for(i=0;i<s1;i++)
		{
			ts+=idnum[i]*cr[i];
		}
		int m=ts%11;
		int li=mr[m];
		char newid[20]={'\0'};
		for(i=0;i<s1;i++)
		{
			char ch[2]={'\0'};
			sprintf(ch,"%d",idnum[i]);
			strcat(newid,ch);
		}
		if(li==88)
			strcat(newid,"X");
		else
		{
			char ch[2]={'\0'};
			sprintf(ch,"%d",li);
			strcat(newid,ch);
		}
		printf("身份证号码:%s ",argv[1]);
		if(strstr(argv[1],newid))
		{
			printf("有效");
		}
		else
		{
			printf("无效");	
		}
	



}


你可能感兴趣的:(很久没更新,贴点代码吧 身份证号码校验)