密码和规范要求不符“密码长度大于等于4,且为大写字母、小写字母、数字、特殊字符中的至少3种组合,连续三位均不能为连续性字符或数字(如012)”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | #define _CRT_SECURE_NO_WARNINGS //vs编译使用 #include <stdio.h> #include <string.h> void my_check(char* str); typedef struct { char pswd[64]; char type; char type_1[4]; char same_cnt; }my_pswd; typedef enum { BIG_WORD = 1, SMALL_WORD, NUM, SPECIAL, }TYPE_ENUM; my_pswd g_my_pswd; int main() { while (1) { memset(&g_my_pswd, 0, sizeof(my_pswd)); scanf("%s", g_my_pswd.pswd); my_check(g_my_pswd.pswd); printf("\r\n"); } } char my_match(char c) { if (c >= '0' && c <= '9') return NUM; else if (c >= 'a' && c <= 'z') return SMALL_WORD; else if (c >= 'A' && c <= 'Z') return BIG_WORD; else if ((c >= '!' && c <= '/') || (c >= ':' && c <= '@') || (c >= '[' && c <= 0x60) || (c >= '{' && c <= '~')) return SPECIAL; else return 0; } void my_check(char* str) { if (NULL == str) return; char len = strlen(str); if (len < 4) { printf("长度小于4,不符合要求\r\n"); return; } char type = 0; g_my_pswd.type = 0; //memset(g_my_pswd.type_1, 0, 4); for (char i = 0; i < len; i++) { type = my_match(str[i]); if (type) { if(i == 0) g_my_pswd.type = type; g_my_pswd.type_1[type - 1] = 1; if (g_my_pswd.type == type) { g_my_pswd.same_cnt++; if (g_my_pswd.same_cnt >= 3) { printf("同一字符类型连续三个或以上,不符要求\r\n"); return; } } else { g_my_pswd.same_cnt = 1; g_my_pswd.type = type; } } else { printf("字符类型不符要求\r\n"); return; } } char sum = 0; for (char i = 0; i < 4; i++) { sum += g_my_pswd.type_1[i]; } if (sum < 3) { printf("未使用三种类型,不符合\r\n"); return; } printf("密码符合:%s\r\n", str); } |