题解 | #密码强度等级#
密码强度等级
https://www.nowcoder.com/practice/52d382c2a7164767bca2064c1c9d5361
#import <Foundation/Foundation.h>
// 计算长度分
int lengthScore(int length) {
if (length <= 4) {
return 5;
} else if (length <= 7) {
return 10;
} else {
return 25;
}
}
// 计算字母分
int alphaScore(char passwd[]) {
int hasUpper = 0;
int hasLower = 0;
for (int i = 0; i < strlen(passwd); i++) {
if (passwd[i] >= 65 && passwd[i] <= 90) {
hasUpper = 1;
} else if (passwd[i] >= 97 && passwd[i] <= 122) {
hasLower = 1;
}
}
if (hasLower == 0 && hasUpper == 0) {
return 0;
} else if (hasLower == 1 && hasUpper == 1) {
return 20;
} else {
return 10;
}
}
// 计算数字分
int digitalScore(char passwd[]) {
int digitalNum = 0;
for (int i = 0; i < strlen(passwd); i++) {
if (passwd[i] >= 48 && passwd[i] <= 57) {
digitalNum ++;
}
}
if (digitalNum == 0) {
return 0;
} else if (digitalNum == 1) {
return 10;
} else {
return 20;
}
}
// 计算符号分
int symbolScore(char passwd[]) {
int symbolNum = 0;
for (int i = 0; i < strlen(passwd); i++) {
if (passwd[i] < 48 || (passwd[i] > 57 && passwd[i] < 65) || (passwd[i] > 90 &&
passwd[i] < 97) || passwd[i] > 122) {
symbolNum ++;
}
}
if (symbolNum == 0) {
return 0;
} else if (symbolNum == 1) {
return 10;
} else {
return 25;
}
}
// 计算奖励分
int awardScore(int alpScore, int digScore, int symScore) {
if (alpScore == 20 && digScore > 0 &&
symScore > 0) {
return 5;
} else if (alpScore == 10 && digScore > 0 &&
symScore > 0) {
return 3;
} else if (alpScore == 10 && digScore > 0 &&
symScore == 0) {
return 2;
} else {
return 0;
}
}
// 格式化导出字符串
char* exportResult(int score) {
if (score >= 90) {
return "VERY_SECURE";
} else if (score >= 80) {
return "SECURE";
} else if (score >= 70) {
return "VERY_STRONG";
} else if (score >= 60) {
return "STRONG";
} else if (score >= 50) {
return "AVERAGE";
} else if (score >= 25) {
return "WEAK";
} else {
return "VERY_WEAK";
}
}
int main(int argc, char* argv[]) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
char passwd[300];
gets(passwd);
// printf("原始密码%s\n", passwd);
int lenScore = lengthScore(strlen(passwd));
int alpScore = alphaScore(passwd);
int digScore = digitalScore(passwd);
int symScore = symbolScore(passwd);
int awaScore = awardScore(alphaScore(passwd), digitalScore(passwd), symbolScore(passwd));
int totalScore = lenScore + alpScore + digScore + symScore + awaScore;
// printf("lenScore is %d\n", lenScore);
// printf("alpScore is %d\n", alpScore);
// printf("digScore is %d\n", digScore);
// printf("symScore is %d\n", symScore);
// printf("awaScore is %d\n", awaScore);
// printf("totalScore is %d\n", totalScore);
printf("%s", exportResult(totalScore));
[pool drain];
return 0;
}

