身份證號碼檢測

2021-06-08 10:25:21 字數 2459 閱讀 6395

華為的上機題

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

1、 長度為18位;

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

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

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

例如:511002 19880808 0111或511002 19880808011x。

請實現身份證號碼合法性判斷的函式。除滿足以上要求外,需要對持有人生日的

年、月、日資訊進行校驗。年份大於等於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)

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

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

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

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

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

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

7) 輸入:」511002 1989 0229 1234」,函式返回值:7;

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

#include #include #include int verifyidcard(char* input)   

if(input[17] == 'x' || (input[17]>='0' && input[17]<= '9'));

else

return 3;

char year[5];

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;

char month[3];

month[0] = input[10];

month[1] = input[11];

month[2] = '\0';

int month_num = atoi(month);

if(month_num > 12 || month_num < 1)

return 5;

char day[3];

day[0] = input[12];

day[1] = input[13];

day[2] = '\0';

int day_num = atoi(day);

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

else if(month_num == 1 || month_num == 3 ||month_num == 5 ||month_num == 7 ||month_num == 8 ||month_num == 10 ||month_num == 12)

else

}

else // 不是閏年

else if(month_num == 1 || month_num == 3 ||month_num == 5 ||month_num == 7 ||month_num == 8 ||month_num == 10 ||month_num == 12)

else

}

return 0;

}void main()

身份證號碼

每乙個人自出生後都會有乙個身份證號碼。根據我國有關部門規定,公民身份號碼是特徵組合碼,由十七位數字本體碼和一位數字校驗碼組成。排列順序從左至右依次為 六位數字位址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。居民身份證是國家法定的證明公民個人身份的有效證件。例如 對於身份證號碼330719...

身份證號碼格式檢測

驗證身份證是否有效 function validateidcard idcard elseif strlen idcard 15 else 計算身份證的最後一位驗證碼,根據國家標準gb 11643 1999 function calcidcardcode idcardbody 加權因子 factor...

身份證號碼驗證

說明 驗證身份證的有效性 引數 cid 身份證號碼 返回 地方 出生時間 性別 private string checkcidinfo string cid if cid.length 18 char c cid cid.length 1 bool last false if c 0 c 9 c a...