不用正则判断身份证号码输入的合法性:
<code>int verifyIDCard(char* in); void info(char* id) { int n=verifyIDCard(id); switch(n) { case 0: printf("id输入正确!\n"); break; case 1: printf("id长度不合法!\n"); break; case 2: printf("id 1-17位含有非数字的字符!\n"); break; case 3: printf("id 第18位既不是数字也不是x!\n"); break; case 4: printf("id年份输入错误!\n"); break; case 5: printf("id月份输入错误!\n"); break; case 6: printf("id日输入错误!\n"); break; case 7: printf("id闰年日输入错误!\n"); break; default: break; } } int verifyIDCard(char* in) { int year,month,day; int i; // 循环变量,也是id的第i位 if((strlen(in))!=18) // 判断长度 return 1; if(!(in[17]>='0' && in[17]<='9'|| in[17]=='x')) // 判断第18位 return 3; for(i=0;i<6;i++) // 判断1-6位 if(in[i]'9') return 2; for(year=0;i<10;i++) // 判断7-10位的年份 if(in[i]'9') return 2; else year=year*10+in[i]-'0'; // 提取出year if(year<=1900) return 4; for(month=0;i<12;i++) // 判断11-12位的月份 if(in[i]'9') return 2; else month=month*10+in[i]-'0'; // 提取出month for(day=0;i<14;i++) // 判断13-14位的日 if(in[i]'9') return 2; else day=day*10+in[i]-'0'; // 提取出day 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(year%4==0&&year%100!=0||year%400==0) { if(day<1||day>29) return 7; } else if(day<1 || day>28) return 7; break; default: return 5; } for(;i<17;i++) // 判断15-17位 if(in[i]'9') return 2; return 0; }/<code>
-End-