C++_密码多条件验证

创始人
2024-12-29 08:50:52
0 次浏览
0 评论

4-16个字符,由字母、数字和下划线组成.怎么填?

它可以包含这三种类型中的任何一种,但不能仅包含数字或字母,例如abc__123。

C++怎样让一个字符串中必须不仅有数字、大写字母还有小写字母

#include#include#include#includeusingnamespacestd;classPassword{public:staticconstunsignedintANY=0xFFFFFFFF;//初始化结果staticconstantINIT_RESULT_LENGTH_ERROR=1;staticconstantINIT_RESULT_CAPITAL_LETTER_AMOUNT_ERROR=2;ASE_LETTER_AMOUNT_ERROR=4;staticconstantINIT_RESULT_DIGIT_AMOUNT_ERROR=8;staticconstantINIT_RESULT_MAX_LENGTH_NOT_ENOUGH_ERROR=16;staticconstantINIT_RESULT_OK=0;//查看工单结果staticconstantCHECKE_RESULT_LENGTH_ERROR=1;staticconstantCHECKE_RESULT_HAS_FORBIDDEN_CHARS_ERROR=2;静态常量CHECKE_RESULT_CAPITAL_LETTER_AMOUNT_ERROR=4;静态常量CHECKE_RESULT_LOWERCASE_LETTER_AMOUNT_ERROR=8;静态常量CHECKE_RESULT_DIGIT_AMOUNT_ERROR=16;staticconstantCHECKE_RESULT_OK=0;//除了auto和小写字母和数字外,还有其他默认字符staticconststringDefaultCharrs;public://Function:返回初始化时出现的错误码errorCode对应的详细信息staticstringGetInitErrorMessage(interrorCode){stringerrorMessage="";if(errorCode&INIT_RESSULT_LENGTH_ERROR)errorMessage+="[Error]:密码指定长度不正确!";if(errorCode&INIT_RESULT_CAPITAL_LETTER_AMOUNT_ERROR)errorMessage+="[错误]:大写字母个数错误!";手指错了!";if(errorCode&INIT_RESULT_MAX_LENGTH_NOT_ENOUGH_ERROR)errorMessage+="[Error]:密码的最大长度不足以容纳小写字母和数字及小写字母!;returnerrorMessage;}//功能:返回错误码errorCode时对应的详细信息检查密码staticstringGetCheckErrorMessage(interrorCode){stringerrorMessage="";if(errorCode&CHECKE_RESULT_LENGTH_ERROR)errorMessage+="[错误]名称!";if(errorCode&CHECKE_RESULT_HAS_FORBIDDEN_CHARS_ERROR)errorMessage+="[错误]:密码中出现禁止字符!";if(errorCode&CHECKE_RESULT_CAPITAL_LETTER_AMOUNT_错误)错误消息+=“[错误]:中的字母数车票不符合规格!";if(errorCode&CHECKE_RESULT_LOWERCASE_LETTER_AMOUNT_ERROR)errorMessage+="[错误]:密码中小写字母的个数不符合规范!";if(errorCode&CHECKE_RESULT_DIGIT_AMOUNT_ERROR)errorMessage+="[错误]:密码位数不符合规范!";if(errorMessage=="")errorMessage+="[正确]:密码符合规范!";returnerrorMessage;}//功能:生成一个[min,max]之间的随机数。
staticunsignedintRandom(unsignedintmin,unsignedintmax){if(min==max)returnmin;elseif(min>max)return0else{staticunsignedintseed=0;srand(time(null)+seed+);return()%(max-min)+min;}}//功能:返回a和b中较小的数staticunsignedintMin(unsignedinta,unsignedintb){return<=b?a:b;}//功能:返回比较时a和b中较小的数较大的数staticunsignedintMax(unsignedinta,unsignedintb){return>=b?a:b;}//功能:检查n的取值范围是否为[min,max]staticboolIsBetween(unsignedintmin,unsignedmax){returnmin<=n&n<=max;}​​public:/*密码类型参数:minLength最小字母数.ItalLtter最大字母数自适应.=20,unsignedintminCapital.Letter=1,unsignedintmaxCapitalLtter=ANY,unsignedintminLowercaseLetter=1,unsignedintmaxLowercaseLetter=ANY,unsignedintminDigit=1,unsignedintmaxDigit=WHAT,stringavailableChars=DefaultChars){this->minLength=minLength;这->maxLength=maxLength;这->minCapitalLtter=minCapitalLtter;this->maxCapitalLetter=maxCapitalLtter;这->minLowercaseLetter=minLowercaseLetter;这->maxLowercaseLetter=maxLowercaseLetter;这->minDigit=minDigit;this->maxDigit=maxDigit;this->availableChars=availableChars;init();}/*功能:检查密码规范的psd是否符合GetCheckErrorMessage指定的错误信息。
*/intcheck(stringpsd){interrorCode=CHECKE_RESULT_OK;//检查长度if(psd.length()maxLength)errorCode|=CHECKE_RESULTLT_LENGTH_ERROR;intnCL=0,nLL=0,nD=0;for(inti=0;iavailableChars.find_first_of(PSD[i])==string::npos)//检查错误中字符是否可用|=CHECKE_RESULT_HAS_FORBIDDEN_CHARS_ERROR;}if(!(this->minCapitalLtter<=nCL&&nCL<=这->maxCapitalL酯))errorCode|=CHECKE_RESULT_CAPITAL_LETTER_AMOUNT_ERROR;if(!(this->minLowercaseLetter<=nLL&&nLL<=this->maxLowercaseLetter))错误orCode|=CHECKE_RESULT_LOWERCASE_LETTER_AMOUNT_ERROR;if(!(this>minDigit<=nD&&nD<=this->maxDigit))errorCode|=CHECKE_RESULT_DIGIT_AMOUNT_错误;returnerrorCode;}/*功能:根据密码类型生成一般随机密码返回:符合密码规范的随机密码字符串*/stringgenerate(){//实际密码长度unsignedintlength=Random(Max(this->minLength,(this->minCapitalLtter+this->minLowercaseLetter+this->minDigit)),this->maxLength);//实际密码的字母个数unsignedintnCapitalLtter=Random(->minCapitalLtter,Min(this->maxCapitalLtter,(long-this->minLowercaseLetter-this->minDigit)));//密码本身的小写字母个数unsignedintnLowerLetter=Random(this->minLowercaseLetter,Min(this->maxLowercaseLetter;nedintnDigit=Random(this->minDigit,Min(this->maxDigit;h-nCapitalLtter-nLowerLetter-nDigit;if(availableChars.length()==0){nOther=0;length=nCapitalLtter+nLowerLetter+nDigit;}stringpsd="";for(inti=0;i0&&(r==0||nLowerLetter==0&&nDigit==0)){//大写字母psd+=Random(0,25)+'A';nCapitalLetter--;}elseif(nLowerLetter>0&&(r==1||nCapitalLetter==0&&nDigit==0)){//小写字母psd+=Random(0,25)+'a';nLowerLetter--;}elseif(nDigit>0&&(r==2||nCapitalLetter==0&&nLowerLetter==0)){//个数字符psd+=Random(0,9)+'0';nDigit--;}elseif(nOther>0){//其他字符psd+=availableChars[Random(0,availableChars.length()-1)];nOthers--;}else{//当前没有要添加的字符,字符将重新生成。
i--;}}returnpsd;}private:/功能:检查初始化参数voidinit(){this->initErrorCode=INIT_RESULT_OK;if(->minLength>this->maxLength||->maxLength==0)this->initErrorCode|=INIT_RESULT_LENGTH_ERROR;if(this->minCapitalLetter>this->maxCapitalLetter)this->initErrorCode|=INIT_RESULT_CAPITAL_LETTER_AMOUNT_ERROR;if(minLowercaseLetter>maxLowercaseLetter)this->initErrorCode|=INIT_RESULT_LOWERCASE_LETTER_AMOUNT_ERROR;if((this->minDigit>is->maxDigit)this->initErrorCode|=INIT_RESULT_DIGIT_AMOUNT_ERROR;if((this->minCapitalLetter+this->minLowercaseLetter+this->minDigit)>this->maxLength)this->initErrorCode|=INIT_RESULT_MAX_LENGTH_NOT_ENOUGH_ERROR;//初始化时出错,异常被抛出。
if(this->initErrorCode!=INIT_RESULT_OK){ostringstreamss;ss<<"错误消息:"<availableChars<<"\""<initErrorCode<initErrorC'代码)<,./?";intmain(intargc,char*argv[]){try{//默认密码模式Passwordpassword;charbuffer[M],cout<<"输入密码:";cin.getline(buffer,sizeof(buffer)/sizeof(buffer[0]));输入密码cout<"<"<"<注意:这里最小长度大于最大长度。
初始化将会失败。
26,25,//最小字母数和最大字母数auto.注意:这里的最小数大于最大数。
初始化将会失败。
8.7、最小的数字和最大的小写字母数。
注意:这里的最小数大于最大数。
初始化将会失败。
10.9、最小数和最大数。
注意:这里的最小数大于最大数。
初始化将会失败。
12,0,//其他字符(不包括大小写数字)Password::DefaultChars);}catch(stringmsg){//password3初始化错误抛出的异常。
cout
热门文章
1
c语言有三维数组吗 C语言三维数组初始化详细方法和步骤如下:1第一步,需要定义一个数组。常见的数组类...

2
js字符串包含某个字符串的个数 js问题:求字符串中某个字符出现的个数的方法?看看是否满足你的需求(x);}pu...

3
轻松调整SQL Server 2008表... sql2008表格怎么只能编辑前两200行200线是默认设置,并且仅在号码开通时...

4
C语言基础解析:从Hello World... C语言的基本要素有哪些?基本的C语言格式可以参考基本的helloworld程序。...

5
Python排列组合与循环运用技巧解析 怎样使用Python进行排列组合?对于这类问题,我们可以使用分割循环来执行转换和...

6
C语言for循环技巧:非C字符位置记录与... C语言for循环问题求解.在for中,我记录了要写入的非c字符的位置。仅当字符不...

7
Hive内置函数全解析:数学、字符串、日... 2021年大数据Hive(五):Hive的内置函数(数学、字符串、日期、条件、转...

8
Python随机数生成技巧:轻松输出任意... python通过键盘输入随机数种子,产生50个[0,100]之间的随机正整数,然...

9
C语言实现字符串倒序输出教程 请教C语言字符串倒序输出#include#includevoidmain(){c...

10
C语言一元二次方程解答器实现与优化 这个c语言程序哪里有问题,我想写一个一元二次方程解答器。#include#inc...