8、输入:”511002198808081234”,函数返回值:0;
C代码如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> int verifyIDCard(char* input); int is_leapyear(int year); int getyear(char* input); int getmonth(char* input); int getday(char* input); int check_1to17(char* input); int check18(char* input); int chech_year_month_day(int year, int month, int day); int main() { char input[8][100] = {"511002111222","511002abc123456789", "51100219880808123a","511002188808081234","511002198813081234", "511002198808321234","511002198902291234","511002198808081234"}; int i; for(i=0; i<8; i++) { printf("the IDcard is: %s, the result is: %d\n",input[i],verifyIDCard(input[i])); } return 0; } int is_leapyear(int year) { if(( (year%4==0) && (year%400!=0) ) || (year%400==0)) return 1; return 0; } int getyear(char* input) { int year=0; year = (input[6]-'0') * 1000 + (input[7]-'0') * 100 + (input[8]-'0') * 10 + (input[9]-'0'); return year; } int getmonth(char* input) { int month=0; month = (input[10]-'0') * 10 + (input[11]-'0'); return month; } int getday(char* input) { int day=0; day = (input[12]-'0') * 10 + (input[13]-'0'); return day; } int check_1to17(char* input) { int i; for(i=0; i<17; i++) if( !(input[i]>='0' && input[i]<='9') ) return 0; return 1; } int check18(char* input) { char ch = input[17]; if( (ch=='x') || (ch>='0' && ch<='9') ) return 1; else return 0; } int check_year_month_day(int year, int month, int day) { int leap; leap = is_leapyear(year); if(year<1900 || year>2100) return 4; if(month<1 || month>12) return 5; switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: { if(day<1 || day>31) return 6; break; } case 4: case 6: case 9: case 11: { if(day<1 || day>30) return 6; break; } case 2: { if(leap) { if(day<1 || day>29) return 6; break; } else { if(day<1 || day>28) return 6; break; } } } return 0; } int verifyIDCard(char* input) { int year,month,day; if(strlen(input)!=18) return 1; else { if(!check_1to17(input)) return 2; else { if(!check18(input)) return 3; else { year = getyear(input); month = getmonth(input); day = getday(input); return check_year_month_day(year,month,day); } } } }
原文:http://blog.csdn.net/hs794502825/article/details/38051305