華為機試 身份證合法性判斷

2021-07-04 08:12:08 字數 2101 閱讀 5965

問題描述:

我國公民的身份證號碼特點如下:

1、 長度為18位;

2、 第1~17位只能為數字;

3、 第18位可以是數字或者小寫英文本母x。

4、 身份證號碼的第7~14位表示持有人生日的年、月、日資訊。

例如:511002198808080111或51100219880808011x。

請實現身份證號碼合法性判斷的函式。除滿足以上要求外,需要對持有人生日的年、月、日資訊進行校驗。年份大於等於2023年,小於等於2023年。需要考慮閏年、大小月的情況。所謂閏年,能被4整除且不能被100整除或 能被400整除的年份,閏年的2月份為29天,非閏年的2月份為28天。其他情況的合法性校驗,考生不用考慮。

函式返回值:

1) 如果身份證號合法,返回0;

2) 如果身份證號長度不合法,返回1;

3) 如果身份證號第1~17位含有非數字的字元,返回2;

4) 如果身份證號第18位既不是數字也不是英文小寫字母x,返回3;

5) 如果身份證號的年資訊非法,返回4;

6) 如果身份證號的月資訊非法,返回5;

7) 如果身份證號的日資訊非法,返回6(請注意閏年的情況);

【注】除成功的情況外,以上其他合法性判斷的優先順序依次降低。也就是說,如果判斷出長度不合法,直接返回1即可,不需要再做其他合法性判斷。

要求實現函式:

int verifyidcard(char* input)

【輸入】 char* input,表示輸入的身份證號碼字串

【輸出】 無

【返回】 判斷的結果,型別為int

示例 1) 輸入:」511002111222」,函式返回值:1;

2) 輸入:」511002abc123456789」,函式返回值:2;

3) 輸入:」51100219880808123a」,函式返回值:3;

4) 輸入:」511002188808081234」,函式返回值:4;

5) 輸入:」511002198813081234」,函式返回值:5;

6) 輸入:」511002198808321234」,函式返回值:6;

7) 輸入:」511002198902291234」,函式返回值:7;

8) 輸入:」511002198808081234」,函式返回值:0;

#include

#include

using

namespace

std;

int verifyidcard(char* input)

}if(!isdigit(input[17]) && input[17]!='x')

return

3; year[0]=input[6];

year[1]=input[7];

year[2]=input[8];

year[3]=input[9];

year[4]='\0';

int year_num=atoi(year);

if(year_num<=1900 || year_num>=2100)

return

4; month[0]=input[10];

month[1]=input[11];

month[2]='\0';

int month_num=atoi(month);

if(month_num<1 || month_num>12)

return

5; day[0]=input[12];

day[1]=input[13];

day[2]='\0';

int day_num=atoi(day);

if(day_num<=0 || day_num>31)

return

6; if((year_num%4==0 && year_num%100 !=0) || (year_num % 400==0)) //閏年

else

}else

//非閏年

else

}return0;}

int main()

身份證合法性驗證

2015年10月14日 16 42 22 從網上扒的,刪掉了一小段無用 修改了一行判斷省份的 1 2 身份證號驗證 相容15,18位 3 4function checkidentitycode idcard 5 12 city array 13 11 北京 12 天津 13 河北 14 山西 15 ...

身份證合法性驗證

2015年10月14日 16 42 22 從網上扒的,刪掉了一小段無用 修改了一行判斷省份的 1 2 身份證號驗證 相容15,18位 3 4function checkidentitycode idcard 5 12 city array 13 11 北京 12 天津 13 河北 14 山西 15 ...

身份證合法性校驗模板

這個可以驗證15位和18位的身份證,並且包含生日和校驗位的驗證。如果有興趣,還可以加上身份證所在地的驗證,就是前6位有些數字合法有些數字不合法。function isidcardno num num num.touppercase 身份證號碼為15位或者18位,15位時全為數字,18位前17位為數字...